自己实现的Spring父类注入
在开发过程如果使用全注解方式,难免会遇到一个类继承至某个父类,而这个父类的属性需要注入。
?
如果使用XML可以直接在XML配置文件中使用属性setter进行注入父类属性。
?
但是如果使用的是全注解,这个问题会比较棘手。
?
方法1:
自己在工程项目中写一个类继承至该父类A,而不要直接继承该父类A。原因是该父类A可能是另外的jar包中的类,该类A可能没有被annotation修饰,无法完成注入,而你自己写的继承至该类的子类B可以在项目中使用annotation进行属性注入(要复写父类的setter方法,然后使用annotation注解),然后项目中其它类C可以继承至类B,完成父类属性的注入
?
这种方法的可以解决父类注入的问题,但是要自己写一个父类实现一个中间的桥接。
?
方法2:
实现两级注入,所谓的两级注入即是首先依赖spring自身的注入逻辑完成子类主要属性的注入,而父类的某些属性注入依赖自己实现的BeanPostProcessor完成二级注入。
?
我目前实现的方法:
?
主要实现一个BeanPostProcessor:
?使用到了几个自定义注解:
ParentInject:
?public class TestMain {/** * @param args */public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("test-context.xml");Sub sub = ctx.getBean(Sub.class);System.out.println(sub.getName());}}输出:
PostConstruct:test
test
hello2表明父类注入成功。
?当然这种方式可以有多种变形,其主要意思和方法1是差不多的。