欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring3之 bean 注解

程序员文章站 2022-05-23 10:22:11
...

小记下,spring注解相关:

com.spring305.test.annotations.env.Env1.java

 

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Component
//@Configuration
public class Env1 {

	private int id;
	@Value("test name value in env1 class")
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

 com.spring305.test.annotations.env.Env2.java

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;

//@Component
@Configuration
//@Import({com.spring305.test.annotations.env.Env1.class})
public class Env2 {
	
/**
 一、@Autowire默认按照类型进行注入按类型装配依赖对象
	,若允许null值,可以设置它的required属性为false。
	如果想使用按名称装配,可以结合@Qualifier注解一起使用
	@Autowired @Qualifier("XXX")这样就是按照名称进行装配
	@Autowired(required=true)必须注入值,不能为null
	
	
二、@Resource 和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认是按名称装配。
	名称可以通过@Resource的name属性指定, 如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找对象,
	当注解标注在属性的setter方法上,即默认取属性名作 为bean名称寻找依赖对象。当没有使用name属性时,如果按照字段名找不到bean,
	就会转而使用按类型装配的方式进行查找;但当使用了name属 性,只能按照指定的name查找bean,当找不到相应的bean时,就会抛异常。
	@Resource(name="xmlBeanx")
	
二者亦有区别:
	@Autowired applies to fields, constructors, and multi-argument methods, allowing for
	narrowing through qualifier annotations at the parameter level. By contrast, @Resource is
	supported only for fields and bean property setter methods with a single argument
*/
	//@Autowired(required=true)
	private  Env1 env1;
	@Resource(name="env1")
	private Env1 env11;

	public Env1 getEnv1() {
		return env1;
	}
	
	@Autowired
	public void setEnv1(@Qualifier("env1") Env1 env1) {
		this.env1 = env1;
	}

	public Env1 getEnv11() {
		return env11;
	}

	public void setEnv11(Env1 env11) {
		this.env11 = env11;
	}

	@PostConstruct
    public void populateMovieCache() {
		System.out.println(Env2.class+"_"+"@populateMovieCache");
        // populates the movie cache upon initialization...
    }
    @PreDestroy
    public void clearMovieCache() {
    	System.out.println(Env2.class+"_"+"@clearMovieCache");
        // clears the movie cache upon destruction...
    }

}

 测试:

com.spring305.test.annotations.AnnotationTest2.java

@Test
	public void testEnv(){
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Env2.class,Env1.class);
		Env2 bean = ctx.getBean("env2",Env2.class);
		Env1 env1 = ctx.getBean("env1",Env1.class);
		//Env1 env2 = ctx.getBean("com.spring305.test.annotations.env.Env1",Env1.class);
		System.out.println(bean.getEnv1().getName());
		System.out.println(bean.getEnv11().getName());
		System.out.println(env1.getName());
		//System.out.println(env2.getName());
	}

 JSR 330 似乎更加丰富些。。先记下这几个,待补充。。。

 

相关标签: Bean Spring Cache