Spring AOP:@DeclareParents 為對象添加方法


通過@Before @After @Around都注解,我們為對象原有的方法添加上了新的功能。那么,我們能不能為對象添加新的方法呢?通過 @DeclareParents  ,答案是肯定的。

 

定義一個 Person 的空類及其子類 Student

@Component
public class Person {
}


@Component
public class Student extends Person {
    public void sayIdentification(){
        System.out.println("我是學生。");
    }
}

 

 

定義一個名為 Skill 的接口及它的實現類 SkillImpl。我們將要把 SkillImpl 的getSkill()方法添加到其他的類實例

@Component
public interface Skill {
    void getSkill(String skill);
}

@Component
public class SkillImpl implements Skill { @Override public void getSkill(String skill) { System.out.println(skill); } }

 

SpringAop 配置類

@Component
@Aspect
public class AopConfig {

    // “...aop.Person”后面的 “+” 號,表示只要是Person及其子類都可以添加新的方法
    @DeclareParents(value = "com.san.spring.aop.Person+", defaultImpl = SkillImpl.class)
    public Skill skill;
}

 

SpringConfig 配置類

@ComponentScan
@Configuration
@EnableAspectJAutoProxy
public class SpringConfig {
}

 

Test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class AopTest {

    @Autowired
    private Student student;

    @Test
    public void test(){
        Skill skill = (Skill)student; // 通過類型轉換,student對象就擁有了SkillImp 類的方法
        skill.getSkill("我會英語");
        student.sayIdentification();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM