spring基础学习三(注解使用)


注解(Annotation)的使用

目录:


1、在一个类中引用其他对象

2、把一个类对象放到容器中


分为两种情况:

   1、在一个类中引用其他对象

         (1)@AutoWired  根据byType需找,使用@Qualifier("name") 来指定名字查找byName

样例:       

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:annotation-config />
	<bean id="aDAO" class="com.spring.app.test.ADAO"/>
	<bean id="aService" class="com.spring.app.test.AService"></bean>
</beans>

public class ADAO {
	public void save(){
		System.out.println("this is save()...");
	}
}

public class AService {
	
	private ADAO aDAO;
	
	@Autowired
	public void setADAO(ADAO aDAO){
		this.aDAO = aDAO;
	}
	public ADAO getADAO(){
		return aDAO;
	}
	public static void main(String[] args){
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		AService aService = (AService) context.getBean("aService");
		aService.getADAO().save();
	}
}

@AutoWired和@Qualifier('')合用:

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:annotation-config />
	<bean id="aDAO" class="com.spring.app.test.ADAO"/>
	<bean id="aDAO1" class="com.spring.app.test.ADAO"/>
	<bean id="aService" class="com.spring.app.test.AService"></bean>
</beans>


public class AService {
	
	private ADAO aDAO;
	
	@Autowired
	public void setADAO(@Qualifier("aDAO1") ADAO aDAO){
		this.aDAO = aDAO;
	}
	public ADAO getADAO(){
		return aDAO;
	}
	public static void main(String[] args){
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		AService aService = (AService) context.getBean("aService");
		aService.getADAO().save();
	}
}
            (2)@Required:这个注解不是用来实现注入的,是用来在编译时,检查错误的

             (3)@Resource 这个注解比较常用

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。

@Resource(这个注解属于J2EE的)建议使用这个注解,不使用@AutoWired(属于sping的)以减小与spring的耦合度。

网上许多资料都说是先byName匹配,再byType匹配,但是我试验了几次都没有成功

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:annotation-config />
	<bean id="aDAO" class="com.spring.app.test.ADAO"/>
	<bean id="bDAO1" class="com.spring.app.test.ADAO"/>
	<bean id="aService" class="com.spring.app.test.AService"></bean>
</beans>

public class AService {
	
	private ADAO aDAO;
	
	@Resource(name="aDAO")//这个地方不写就会提示type匹配有两个抛异常
	public void setADAO(ADAO aDAO){
		this.aDAO = aDAO;
	}
	public ADAO getADAO(){
		return aDAO;
	}
	public static void main(String[] args){
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		AService aService = (AService) context.getBean("aService");
		aService.getADAO().save();
	}
}

2、把一个类对象放到容器中

@Component @Repository @Service @Controller这四个目前为止功能是一样的,放到类上面,容器初始化时读取

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:annotation-config />
	<context:component-scan base-package="com.spring.app.test"></context:component-scan>
<!-- 	<bean id="aDAO" class="com.spring.app.test.ADAO"/> -->
<!-- 	<bean id="bDAO1" class="com.spring.app.test.ADAO"/> -->
	<bean id="aService" class="com.spring.app.test.AService"></bean>
</beans>

@Component
public class ADAO {
	public void save(){
		System.out.println("this is save()...");
	}
}

@Component
public class AService {
	
	private ADAO aDAO;
	
	@Resource
	public void setADAO(ADAO aDAO){
		this.aDAO = aDAO;
	}
	public ADAO getADAO(){
		return aDAO;
	}
	public static void main(String[] args){
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		AService aService = (AService) context.getBean("aService");
		aService.getADAO().save();
	}
	@PostConstruct
	public void init(){
		System.out.println("init....www");
	}
	@PreDestroy
	public void destroy(){
		System.out.println("destroy....");
	}
	
}

这个地方打印出的结果是:

init....www
init....www
this is save()...

打印两次init....www是因为解析beans.xml时,发现有@Component所以对这个类进行了加载,还发现有

<bean id="aService" class="com.spring.app.test.AService"></bean>这句话,又加载一次。每次加载类型都会执行初始化方法,销毁时执行销毁方法。



你可能感兴趣的:(spring基础学习三(注解使用))