ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 在类中使用 在类上这样写 ~~~ import org.springframework.stereotype.Component; @Component("user") //也可以@Component(value = "user") //相当于 <bean name="user" class="studySpring.User"> public class User { ~~~ Component里面的名字就是bean的名字 来个测试 ~~~ // 1. 创建容器对象 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // 2. 向容器要user对象 Object u = ac.getBean("user"); // 3.打印user对象 System.out.println(u); ~~~ # 自动装配 在 java 代码中使用 @Autowired 或 @Resource 注解方式进行装配 * Autowired **默认先按byType**,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常,细节: 使用注解注入时,set方法不是必须的 ![](https://img.kancloud.cn/b3/76/b376be4df58d1efa7889040570565716_1285x508.png) * Resource 默认按 byName自动注入,如果找不到再按byType找bean,如果还是找不到则抛异常,无论按byName还是byType如果找到多个,则抛异常 可以手动指定bean,它有2个属性分别是name和type,使用name属性,则使用byName的自动注入,而使用type属性时则使用byType自动注入。 ~~~ @Resource(name="bean名字") 或 @Resource(type="bean的class") ~~~ 我们需要在 xml 配置文件中配置以下信息: ~~~ <context:annotation-config /> ~~~ 这个配置隐式注册了多个对注解进行解析处理的处理器: 1. AutowiredAnnotationBeanPostProcessor 2. CommonAnnotationBeanPostProcessor 3. PersistenceAnnotationBeanPostProcessor 4. RequiredAnnotationBeanPostProcessor 写了`<context:component-scan base-package="" />`配置,就不用写`<context:annotation-config />`配置了 **给引用类型注入** 首先对应的类型注入 ~~~ @Component("car") public class Car { ~~~ 然后自动装备 ~~~ @Autowired // 自动装配 private Car car; ~~~ 但是问题来了,匹配多个对象,将无法确定 可以这样,告诉装配那个名称 ~~~ @Autowired // 自动装配 @Qualifier("car2") ~~~ 也可以这样,指定告诉他要注入那个 ~~~ @Resource(name = "car2") private Car car; ~~~ 也可以写在setter上 # 是否必须 @Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如: ~~~ @Autowired(required=true) @Qualifier("personDaoxxxx") private PersonDao personDao; ~~~ required=true代表字段personDao必须要注入值,也即是说在Spring容器中根据类型找不到对应的bean,那就会报异常; required=false意味着在Spring容器中根据类型找不到对应的的bean,就会把该字段设为null。