要注入的类:
public class Bowl { public void putRice() { System.out.println("盛饭..."); } }
一、构造方法注入
Person类:
public class Person { private Bowl bowl; public Person(Bowl bowl) { this.bowl = bowl; } public void eat() { bowl.putRice(); System.out.println("开始吃饭..."); } }
Spring配置文件:
<bean id="bowl" class="com.xxx.Bowl" /> <bean id="person" class="com.xxx.Person"> <constructor-arg name="bowl" ref="bowl"></constructor-arg> </bean>
二、setter注入
Person类:
public class Person { private Bowl bowl; public void eat() { bowl.putRice(); System.out.println("开始吃饭..."); } public void setBowl(Bowl bowl) { this.bowl = bowl; } }
Spring配置文件:
<bean id="bowl" class="com.xxx.Bowl" /> <bean id="person" class="com.xxx.Person"> <property name="bowl" ref="bowl"></property> </bean>
三、注解注入
注册:
@Component //注册所有bean
@Controller //注册控制层的bean
@Service //注册服务层的bean
@Repository //注册dao层的bean
注入:
@Autowired 作用于 构造方法、字段、方法,常用于成员变量字段之上。
@Autowired + @Qualifier 注入,指定bean的名称
@Resource JDK 自带注解注入,可以指定bean的名称和类型等
举例:
Bowl类:
@Component //注册所有bean //@Controller //注册控制层的bean //@Service //注册服务层的bean //@Repository //注册dao层的bean public class Bowl { public void putRice() { System.out.println("盛饭..."); } }
Person类:
@Component //注册所有bean //@Controller //注册控制层的bean //@Service //注册服务层的bean //@Repository //注册dao层的bean public class Person { @Autowired // @Qualifier("bowl") // @Resource(name="bowl") private Bowl bowl; public void eat() { bowl.putRice(); System.out.println("开始吃饭..."); } }
补充:
@Autowired 与@Resource的区别
@Autowired按byType自动注入,而@Resource默认按 byName自动注入。
@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。
如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource(name="bowl") private Bowl bowl;
@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
如果我们想使用名称装配可以结合@Qualifier注解进行使用
@Autowired @Qualifier("bowl") private Bowl bowl;
定义bean:
@Controller @Controller("Bean的名称") 定义控制层Bean,如Action @Service @Service("Bean的名称") 定义业务层Bean @Repository @Repository("Bean的名称") 定义DAO层Bean @Component 定义Bean, 不好归类时使用.
借鉴博客:https://blog.csdn.net/weixin_40423597/article/details/80643990