(13)Spring AOP为目标对象引入新接口

来源:互联网 发布:淘宝店铺模板修改 编辑:程序博客网 时间:2024/06/04 19:03

正常用ioc获取一个bean

接口

package shuai.spring.study.service;public interface IHelloService {    public void sayHello();}

实现类

package shuai.spring.study.service.impl;import shuai.spring.study.service.IHelloService;public class HelloServiceImpl implements IHelloService {    @Override    public void sayHello() {        System.out.println("============Hello World!");    }}

配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">                <bean id="iHelloService" class="shuai.spring.study.service.impl.HelloServiceImpl"/>        </beans>

测试类

package shuai.spring.test;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import shuai.spring.study.service.IHelloService;public class HelloTest {    @Test    public void testHelloWorld() {        @SuppressWarnings("resource")        ApplicationContext context = new ClassPathXmlApplicationContext("HelloWorld.xml");        IHelloService iHelloService = context.getBean("iHelloService", IHelloService.class);        iHelloService.sayHello();    }}

测试结果:

============Hello World!

我们可以利用aop让指定的类实现其它的接口,就比如这个shuai.spring.study.service.impl.HelloServiceImpl类,让它实现INiHao接口

定义接口

package shuai.spring.study.service;public interface INiHao {    public void sayNiHao(String param);}

实现类

package shuai.spring.study.service.impl;import shuai.spring.study.service.INiHao;public class NiHaoImpl implements INiHao {    @Override    public void sayNiHao(String param) {        System.out.println("你好:" + param);    }}
修改配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">                <bean id="iHelloService" class="shuai.spring.study.service.impl.HelloServiceImpl"/>        <bean id="iNiHao" class="shuai.spring.study.service.impl.NiHaoImpl"/>                <!-- <bean id="helloAspect" class="shuai.spring.study.aop.HelloAspect"/> -->        <!-- <aop:aspectj-autoproxy proxy-target-class="true"/> -->        <aop:config>        <!-- <aop:pointcut expression="execution(* shuai.spring.study.service..*.*(..))" id="pointcut"/> -->        <aop:aspect ref="helloAspect">        <!-- <aop:before         method="beforeHello(java.lang.String,java.lang.String)"         pointcut="execution(* shuai.spring.study.service..*.*(..)) and args(param0,param1)"         arg-names="param0,param1"/> -->        <aop:declare-parents         types-matching="shuai.spring.study.service.IHelloService+"         implement-interface="shuai.spring.study.service.INiHao"        delegate-ref="iNiHao"/>        </aop:aspect>        </aop:config></beans>

注意,有关引入新接口的内容都写在declare-parents里面

types-matching表示要为哪些类配置新的接口:shuai.spring.study.service.IHelloService+表示实现了IHelloService接口的类

implement-interface表示要为这些类配置什么接口

delegate-ref表示implement-interface所代表接口的默认实现,delegate-ref表示引用一个bean,也可以写成default-impl="shuai.spring.study.service.impl.NiHaoImpl"

测试类

package shuai.spring.test;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import shuai.spring.study.service.INiHao;public class HelloTest {    @Test    public void testHelloWorld() {        @SuppressWarnings("resource")        ApplicationContext context = new ClassPathXmlApplicationContext("HelloWorld.xml");        INiHao iHelloService = context.getBean("iHelloService", INiHao.class);        iHelloService.sayNiHao("世界");    }}

测试结果:

你好:世界

这个结果跟那个默认实现是有关系的。




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鲜花买回来蔫了怎么办 喝玫瑰醋上火了怎么办 插在花泥上的花怎么办 插的花蔫了怎么办 紫睡莲的茎软了怎么办 家养的荷花烂叶怎么办 家养的荷花叶老是枯萎怎么办 新买的绣球蔫了怎么办 绣球花被太阳晒阉了怎么办 羊肉香精放多了怎么办 被飞机防腐剂弄到皮肤怎么办 狗吃了脱氧保鲜剂呕吐怎么办 小孩误吃试纸了保鲜剂怎么办 狗狗把保鲜剂吃了怎么办 小孩吃了防潮珠怎么办 狗吃了防潮剂怎么办 洋桔梗有点烂根怎么办 变色球花枯萎了怎么办 桔梗花叶子蔫了怎么办 洋桔梗头垂下来怎么办 洋桔梗花容易折断怎么办 眼睛被火炮炸伤了怎么办 逆水寒包裹满了怎么办 逆水寒包裹里满了怎么办 grim soul包裹满了怎么办 剑三包裹满了怎么办 电脑开机后都是英文怎么办 欠员工工资仲裁老板不到庭怎么办 乔丹拖鞋鞋底硬怎么办 公牛插座电阻烧了怎么办 公牛led灯太刺眼怎么办 公牛插座usb坏了怎么办 墙壁上开关坏了怎么办 刑事二审判决后不服的怎么办 空调外机空间小怎么办 离婚判决生效书丢了怎么办 法院判决离婚对方上诉怎么办 法院判决离婚上诉中级法院怎么办 刑诉中二审发现一审事实错误怎么办 法院判决过了执行期怎么办 刑事犯罪判决后法院未执行怎么办