wordpress数据量大网站访问,弄个小程序要多少钱,关键词搜索量查询,wordpress argo1. 依赖注入的介绍
DI#xff0c;也就是依赖注入#xff0c;在容器中建立的 bean #xff08;对象#xff09;与 bean 之间是有依赖关系的#xff0c;如果直接把对象存在 IoC 容器中#xff0c;那么就都是一个独立的对象#xff0c;通过建立他们的依赖关系#xff0c;…1. 依赖注入的介绍
DI也就是依赖注入在容器中建立的 bean 对象与 bean 之间是有依赖关系的如果直接把对象存在 IoC 容器中那么就都是一个独立的对象通过建立他们的依赖关系才能拿出一个对象然后与它建立依赖关系的对象就也可以使用在 Spring 的 IoC 容器中通过配置可以明确各个 Bean之间的依赖关系当一个 Bean 需要另一个 Bean 时IoC 容器会自动将依赖的 Bean 注入进来这个过程就是依赖注入。
2. 三种注入方式
2.1. 属性注入
属性注入直接通过Autowired来实现的直接加在属性上就可以完成注入
Controller
public class UserController {Autowiredprivate UserService userService;public void say(){System.out.println(UserController);userService.say();}
} 2.2. 构造方法注入
构造方法注入是通过在类的构造方法中完成注入
Controller
public class UserController {private UserService userService;private UserController(UserService userService) {this.userService userService;}public void say() {System.out.println(UserController);userService.say();}
}
如果说有多个构造方法的话就需要指明需要使用哪个构造方法完成注入 为什么会空指针呢 如果有多个构造方法的话默认是使用无参的构造方法的可以通过Autowired来指明使用哪个构造方法完成注入
Controller
public class UserController {private UserService userService;private UserController(){}Autowiredprivate UserController(UserService userService) {this.userService userService;}public void say() {System.out.println(UserController);userService.say();}
}
关于传参 交给 Spring 管理的对象如果有参数可以自己指定参数如果没有指定Spring 就会根据名称或者类型从容器中查找对象并注入进来
2.3. setter 注入
setter 注入是需要在 set 方法上加上Autowired的不能省略
Autowired
private void setUserService(UserService userService){this.userService userService;
}
2.4. 三种方式的对比
属性注入
优点简洁使用方便
缺点不能注入一个 final 修饰的属性 构造方法注入
优点
可以注入 final 修饰的属性注入的对象不会被修改依赖对象在使用前一定会被初始化构造方法是在类加载时就会执行的通用性好构造方法是 JDK 支持的换任何框架都适用
setter 注入
优点方便在类实例之后重新对该对象进行配置或者注入
缺点
不能注入 final 修饰的属性注入的对象可能会被改变因为 setter 方法可能会被多次调用就会有被修改的风险
3. Autowired 存在的问题
Autowired 如果是同样类型有多个名称的对象时按照名称来注入如果只有一个对象就直接注入无论名称是否能对上 来看多个对象 可以通过Primary来指定默认使用哪个 bean 来装配
Primary
Bean
public UserInfo userInfo1(){return new UserInfo(lisi1,20);
}
还可以通过Qualifier和Autowired配合使用来指定默认使用哪个 bean 当传入的参数也存在相同类型的对象时也可以指定参数的默认值
Bean
public UserInfo userInfo(Qualifier(name1) String name3){return new UserInfo(name3,20);
}
如果不使用 Autowired的话还可以使用 Resource注解来指定 Autowired和Resource的区别
Autowired 是Spring 框架提供的注解Resource 是 JDK 提供的注解Autowired 默认是按照类型注入Resource 默认是按照名称注入Autowired 优先按照类型匹配如果类型相同再看名称Resource 前提也是要类型匹配只不过是名称匹配的优先级更高例如有一个UserService类需要注入一个UserRepository如果使用Resource注解并且指定了一个名称如Resource(name userRepo)Spring 会首先查找名称为userRepo的UserRepository类型的 Bean。只有在找不到这个名称对应的 Bean 时才会去查找类型为UserRepository的 Bean而不管其名称是什么。
Autowired 的装配顺序 我的主页