bean的非引用类型属性注入
- 名称:@Value
- 类型:属性注解、方法注解
- 位置:属性定义上方,方法定义上方
- 作用:设置对应属性的值或对方法进行传参
- 范例:
@Value("${jdbc.username}")
private String username;
- 说明:
- value值仅支持非引用类型数据,赋值时对方法的所有参数全部赋值
- value值支持读取properties文件中的属性值,通过类属性将properties中数据传入类中
- value值支持SpEL
- @value注解如果添加在属性上方,可以省略set方法(set方法的目的是为属性赋值)
- 相关属性
非引用类型
在UserService里添加 运行结果可见 还可以将其放到set方法上面 也能删掉set方法!
引用类型
@Autowired自动装配,此时只有UserDaoImpl一个userDao类型的实现类,所以自动装填这个实现类。只支持接口只有一个实现类的时候 可以用@Repository给实现类定义个id,支持一个接口有多个实现类的情况
此时要在引用的地方添上@Qualifier来确定引用的bean 修改启动类后运行 可见结果正常 如果有两个或更多没有id的接口实现类,可以在其中一个类上添加@Primary来调用此实现类,只允许用一个
bean的引用类型属性注入
- 名称:@Autowired、@Qualifier
- 类型:属性注解、方法注解
- 位置:属性定义上方,方法定义上方
- 作用:设置对应属性的对象或对方法进行引用类型传参
- 范例:
@Autowired(required=false)
@Qualifier("userDao")
private UserDao userDao;
- 说明:
- @Autowired默认按类型装配,指定@Qualifier后可以指定自动装配的bean的id
- 相关属性
bean的引用类型属性注入
- 名称:@Primary
- 类型:类注解
- 位置:类定义上方
- 作用:设置类对应的bean按类型装配时优先装配
- 范例:
@Primary
public class ClassName()
- 说明:
- @Autowired默认按类型装配,当出现相同类型的bean,使用@Primary提高按类型自动装配的优先级,多个@Primary会导致优先级设置无效
bean的引用类型属性注入
- 名称:@Inject、@Named、@Resource
- 说明:
- @Inject与@Named是JSR330规范中的注解,功能与@Autowired和Qualifier完全相同,适用于不同架构场景
- @Resources是JSR250规范中的注解,可以简化书写格式。
- @Resources相关属性
- name:设置注入的bean的id
- type:设置注入的bean的类型,接收的参数为Class类型
- 属性注入
- 非引用类型注入
- 引用类型注入
- @Autowired、@Inject
- @Qualifier、@Named
- @Primary
- @Resource
|