@Autowired
这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。
<bean id="userDao" class="..."/>
<bean id="userService" class="...">
<property name="userDao">
<ref bean="userDao"/>
</property>
</bean>
这样你在userService里面要做一个userDao的setter/getter方法。
但如果你用了@Autowired的话,你只需要在UserService的实现类中声明即可。
@Autowired
private IUserDao userdao;
@Autowired表示一个属性是否需要进行依赖注入,可以使用在属性、普通方法上、构造方法上。注解中的required属性默认是true,如果没有对象可以注入到属性,则会报出异常;
@Autowired加在某个属性上,spring会从ioc容器中找到bean对象注入到属性上,如果找到多个该类型的Bean对象,则再根据属性的名字从多个Bean对象中确认一个;
@Autowired写在set()方法上,在spring会根据方法的参数类型从ioc容器中找到该类型的Bean对象注入到方法的行参中,并且自动反射调用该方法(被@Autowired修饰的方法一定会执行),所以一般使用在set方法中、普通方法不用;
//构造方法
@Autowired
public Bean(Bean bean) {
System.out.println("010101");
}
//属性上
@Autowired
Bean bean;
//set方法
@Autowired
public void setBean(Bean bean) {
this.bean = bean;
}
//普通方法
@Autowired
public void Method(Bean bean){
System.out.println("普通方法的执行");
}
@Autowired自动装配,默认优先按照类型取IOC容器中寻找对应的组件
annotationConfigApplicationContext.getBean(Person.class);
如果有多个相同类型的组件,再将属性的名称作为组件的id去容器中查找
annotationConfigApplicationContext.getBean("person");
@Autowired配合@Primary(首选项)使用,当使用@Autowired自动装配时,默认优先选择被注解@Primary标注的组件
@Primary
@Bean
public Person person(){
return new Person("张三");
}