使用spring全注解实现继承时遇到的问题

来源:互联网 发布:mysql 更改character 编辑:程序博客网 时间:2024/05/17 07:25
最近在做公司项目,发现公司使用ssm框架时,使用的都是xml文件配置的方式来配置bean,个人闲着无聊,尝试使用全注解的方式来改造这些工程,其中遇到一个问题,场景是:A类继承了B类,B类(抽象类)中定义了两个成员变量(接口引用)和N个成员方法。我需要实现C类调用A类时,使用全注解实现这一步操作。但是在实际运用时,却发现C类中调用A类的D方法(内部是B类两个成员变量实现类的业务操作),是A类继承自B类的方法,A类中没有重写,并且此方法中需要传入B类的两个成员变量(接口类)。
问题在于,我在A类加上注解,通过C类进行调用时,发现方法执行后的结果是空,经过排查,如果单纯的给A类加上注解,D方法不能正确执行得到正确的结果。
解决思路:需要在A类中,为其父类注入相应成员变量的属性值(使用全注解实现)。
解决方案有两种:
方案一:使用@PostConstruct方法
从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct。这两个注解被用来修饰一个非静态的void()方法.而且这个方法不能有抛出异常声明。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。@PostConstruct
修饰的方法会在构造函数之后,init()方法之前运行。
@Resource(name = "B类属性实现类的注解ID")private B类属性 B类属性实现类的注解ID;@PostConstructpublic void init(){super.set属性值(B类属性实现类的注解ID);}
 方案二:使用set方法注入
@Resource(name = "B类属性实现类的注解ID")@Overridepublic void setB类属性(B类属性 B类属性名) {super.setB类属性(B类属性名);}
上述B类与场景中的B类是一个概念,是一个泛指,B类属性是一个接口类。
1 0
原创粉丝点击