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 似乎更加丰富些。。先记下这几个,待补充。。。
上一篇: Python 将字符串分割成单个字符,并形成一个list
下一篇: python编程基础1