我使用@Resource
注释来注入一个正常工作的对象。但是我想在这个注入的对象上设置一个属性,我不确定这是否可以使用注释。
例如,我有一个类Test
,它使用MyClass
注释注入@Resource
个实例。 MyClass
有一个属性myAttribute
,我想在注入MyClass
实例时设置该属性。
有人知道这是否可行?
答案 0 :(得分:0)
您应该使用来自@PostConstruct
的{{1}}注释:
javax.annotation
然后在Spring初始化对象后调用此方法(即已注入所有依赖项)。
我假设public class Test {
@Resource
private MyClass myClass;
@PostConstruct
public void init() {
myClass.setMyAttribute("test-class");
}
}
public class AnotherTest {
@Resource
private MyClass myClass;
@PostConstruct
public void init() {
myClass.setMyAttribute("another-test-class");
}
}
不是单身人士。
答案 1 :(得分:0)
如果您确定在运行时不能拥有多个依赖项或备用MyClass实例,则可以使用StuPointerException的解决方案。但是如果Test和AnotherTest都存在于单个应用程序上下文中,那么由于Spring bean的单例默认范围,AnotherTest初始化也会影响Test的状态。
这是因为@Resource会将同一个bean注入两个所有者bean。
为防止这种情况,您应该在同一个类中创建不同的bean。这需要xml配置或JavaConfig。既然你喜欢这里的注释,那就是:
@Configuration
public class AppConfig {
@Bean
public MyClass myClass1() {
MyClass myClass = new MyClass();
myClass.setMyAttribute("attr-value-1");
return myClass;
}
@Bean
public MyClass myClass2() {
MyClass myClass = new MyClass();
myClass.setMyAttribute("attr-value-2");
return myClass;
}
}
然后您可以像以前一样使用@Resource进行自动装配,但每种情况下使用不同的bean
public class Test {
@Resource("myClass1")
private MyClass myClass;
}
public class AnotherTest {
@Resource("myClass2")
private MyClass myClass;
}
答案 2 :(得分:-1)
DI with Spring:
@Autowired
MyClass myClass
使用Java-ee:
@Inject
MyClass myClass
关于带注释的属性注入,您仍然可以查看@Value
,但是您需要一个属性文件