要注入的类:

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的区别

@AutowiredbyType自动注入,而@Resource默认按 byName自动注入。

@Resource有两个属性是比较重要的,分是nametypeSpring@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

     https://blog.csdn.net/meism5/article/details/90446645  

posted on 2021-09-08 16:08  smile学子  阅读(354)  评论(0编辑  收藏  举报