网站统计分析,延吉建设局网站,怎样找到免费的黄页网站,百度推广怎么做Autowired Resource Qualifier的区别
Autowired注释进行自动注入是#xff0c;Spring容器中匹配的候选Bean数量必须只有一个#xff0c;当找不到一个匹配的Bean时候#xff0c;Spring容器抛出BeanCreationException一次#xff0c;并且指出至少拥有一个匹配的Bean#xf…Autowired Resource Qualifier的区别
Autowired注释进行自动注入是Spring容器中匹配的候选Bean数量必须只有一个当找不到一个匹配的Bean时候Spring容器抛出BeanCreationException一次并且指出至少拥有一个匹配的BeanAutowired默认按照byType进行注入如果发现找到多个bean则又按照byname进行查询如果还是多个则抛出异常。
Autowired
private UserNameServiceImpl userNameService;
//UserNameServiceImpl是一个接口spring先找类型是UsernameServiceImpl的bean如果存在并且唯一则正常得到bean类不唯一则会再查找到的结果集中寻找name为userNameService的bean因为bean的name有唯一性这样应该可以定位到满足的唯一bean
Autowired手动按照byName方式注入使用Qualifier标签
Autowired
Qualifier(userNameService)Qualifier(userNameService)Spring运行我们通过该注解指定bean的名称通过这个注解的方式我们可以解决多数据源的问题如下 Value(${mongodb.address.uri})private String mongAddressUri;Value(${mongodb.moment.uri})private String mongoMomentUri;Value(${mongodb.address.database})private String mongAddressDB;Value(${mongodb.moment.database})private String mongMomentDB;BeanQualifier(addressTemplate)public MongoTemplate addressTemplate(){MongoClient client new MongoClient(new MongoClientURI(mongAddressUri));MongoDbFactory factory new SimpleMongoDbFactory(client, mongAddressDB);return new MongoTemplate(factory);}BeanPrimaryQualifier(momentTemplate)public MongoTemplate momentTemplate(){MongoClient client new MongoClient(new MongoClientURI(mongoMomentUri));MongoDbFactory factory new SimpleMongoDbFactory(client, mongMomentDB);return new MongoTemplate(factory);} 如上所示我们定义了两个mongoTemplate类型的bean但是通过Qualifier注解指定了bean的名称然后通过Primary注解的作用在使用方不指定beanname的情况下默认加载的bean使用方法如下
Autowired
Qualifier(addressTemplate)
private MongoTemplate mongoAddressTemplate;Autowired
Qualifier(momentTemplate)
private MongoTemplate momentTemplate; //或者如下方式Autowired
private MongoTemplate momentTemplate; //此处不指定beanname默认使用momentTemplateSpring不但支持自己定义的Autowired注解还支持几个有JSR-250规范定义的注解他分别是ResourcePostConstruct以及 PreDestroy
Resource作用相当于Autowired只不过Autowired按照byType自动注入而Resource默认按照byName注入Resource中有两个属性比较重要分别是name和typeSpring将Resource注解的name属性解析为bean名称这种方式类似通过数据库id查询type属性解析为bean的类型所有如果使用name属性就用byname策略使用type属性时候则用byType的策略不知道时候通过放射机制使用byName自动注入。 Resource装配顺序 如果同时制定name type则从Spring上下文中找到唯一匹配进行装配找不到抛出异常指定了name则从上下文中查找名称匹配的bean进行装配找不到则抛出异常如果指定type则从上下文中找到类似匹配的唯一bean进行装配找不到抛出异常既没有指定name也没有type则按照默认byName的方式装配如果没有匹配则返回一个原始类型进行匹配此时匹配到则自动装配