当前位置: 首页 > wzjs >正文

寻找南京帮助做网站的单位营销渠道管理

寻找南京帮助做网站的单位,营销渠道管理,英山建设银行网站,傻瓜式做网站代理 静态代理基于继承实现动态代理是基于接口实现 业务层每次实现转账都需要执行,可以把他们拿出来当成一个切面,自己写出一个代理类,让业务层只执行业务的逻辑,重复的代码代理类来完成,然后调用代理类来执行。 代理类…

代理

  • 静态代理基于继承实现
  • 动态代理是基于接口实现
业务层每次实现转账都需要执行,可以把他们拿出来当成一个切面,自己写出一个代理类,让业务层只执行业务的逻辑,重复的代码代理类来完成,然后调用代理类来执行。
代理类
package com.qcby.utils;import com.qcby.service.AccountService;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;//传入目标对象,生成该对象的代理对象,返回。对目标对象的方法进行增强
public class ProxyUtils {//获取代理对象,返回,增强目标对象的方法public static Object getProxy(final AccountService accountService){//使用jdk动态dialing生成代理对象Object proxy = Proxy.newProxyInstance(ProxyUtils.class.getClassLoader(), accountService.getClass().getInterfaces(), new InvocationHandler() {//调用代理对象的方法,invoke方法就会去执行public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//目标对象的方法Object result = null;try {//开启事务TxUtils.startTransaction();//目标对象的方法进行增强,作为结果返回result = method.invoke(accountService,args);//事务提交TxUtils.commit();}catch (Exception e){e.printStackTrace();//事务回滚TxUtils.rollback();}finally {//资源关闭TxUtils.close();}return result;}});return proxy;}
}
测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class Demo2 {@Autowiredprivate AccountService accountService;@Testpublic void run1(){Account account1 = new Account();account1.setName("aaa");Account account2 = new Account();account2.setName("bbb");//创建代理对象AccountService proxy = (AccountService) ProxyUtils.getProxy(accountService);proxy.saveAll(account1,account2);}
}

     AOP

    配置文件形式:(IOC也是用的配置文件形式)
    配置文件
    <?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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!--将目标类配置到spring中--><bean id="userService" class="com.qcby.demo1.UserServiceImpl"/><!--将切面类配置到spring中--><bean id="myXmlAspect" class="com.qcby.demo1.MyXmlAspect"/><!--配置AOP的增强--><aop:config><!--配置切面 = 通知+切入点组成--><aop:aspect ref="myXmlAspect"><!--通用写法--><!--<aop:before method="log" pointcut="execution(public * com.qcby.*.*ServiceImpl.*(..))"/>--><!--前置通知:无论方法成功与否都执行--><!--<aop:before method="log" pointcut="execution(public void com.qcby.demo1.UserServiceImpl.save())"/>--><!--最终通知:失败成功都执行--><!--<aop:after method="log" pointcut="execution(public void com.qcby.demo1.UserServiceImpl.save())"/>--><!--后置通知:方法成功执行之后执行--><!--<aop:after-returning method="log" pointcut="execution(public * com.qcby.*.*ServiceImpl.*(..))"/>--><!--异常通知:有异常才执行--><!--<aop:after-throwing method="log" pointcut="execution(public void com.qcby.demo1.UserServiceImpl.save())"/>--><!--环绕通知:目标方法执行前后都执行  执行方法成功与否对执行前的增强不影响(方法执行不成功也执行前置的)--><aop:around method="aroundLog" pointcut="execution(public * com.qcby.demo1.*ServiceImpl.*(..))"/></aop:aspect></aop:config></beans>
    切面类
    package com.qcby.demo1;import org.aspectj.lang.ProceedingJoinPoint;/*定义切面类 = 切入点(表达式)+通知*/
    //在配置文件里配置成切面类=增强的方法(通知)+需要增强的方法(切入点)
    public class MyXmlAspect {/*通知*/public void log(){//发送手机短信//发送邮件、记录日志、事务管理System.out.println("增强的方法执行了....");}public void log1(){//发送手机短信//发送邮件、记录日志、事务管理System.out.println("前置增强的方法执行了....");}public void log2(){//发送手机短信//发送邮件、记录日志、事务管理System.out.println("后置增强的方法执行了....");}/*环绕通知*/public void aroundLog(ProceedingJoinPoint proceedingJoinPoint){try {log1();proceedingJoinPoint.proceed();log2();} catch (Throwable throwable) {throwable.printStackTrace();}}
    }
    测试类
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:applicationContext.xml")
    public class Demo1 {@Autowiredprivate UserService userService;/*测试*/@Testpublic void run1(){userService.save();}
    }
    半注解方式
    切面类=通知+切入点(现在的切面类已经在通知上添加了切入点)
    package com.qcby.demo2;import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.stereotype.Component;@Component  // 把该类交给 IOC 去管理
    @Aspect // 声明是切面类 == <aop:aspect ref="myXmlAspect">
    public class MyAnnoAspect {//@Before(value = "execution(public * com.qcby.*.*ServiceImpl.*(..))")public void log1(){System.out.println("前置通知增强的方法执行...");}//@AfterReturning(value = "execution(public * com.qcby.*.*ServiceImpl.*(..))")public void log2(){System.out.println("后置通知增强的方法执行...");}//@After(value = "execution(public * com.qcby.*.*ServiceImpl.*(..))")public void log3(){System.out.println("最终通知增强的方法执行...");}//@AfterThrowing(value = "execution(public * com.qcby.*.*ServiceImpl.*(..))")public void log4(){System.out.println("异常通知增强的方法执行...");}@Around(value = "execution(public * com.qcby.*.*ServiceImpl.*(..))")public void log5(ProceedingJoinPoint proceedingJoinPoint){try {log1();proceedingJoinPoint.proceed();log2();} catch (Throwable throwable) {throwable.printStackTrace();}}
    }
    配置文件
    <!--配置文件中开启自动代理-->
    <aop:aspectj-autoproxy/>
    <!--开启注解扫描-->
    <context:component-scan base-package="com.qcby" />
    测试类
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:applicationContext.xml")
    public class Demo2 {@Autowiredprivate AccountService accountService;@Testpublic void run1(){accountService.save();}
    }
    纯注解形式
    配置类
    @Configuration  // 配置类
    @ComponentScan(value = "com.qcby")  // 扫描包
    @EnableAspectJAutoProxy  // 开启自动代理 == <aop:aspectj-autoproxy/>
    public class SpringConfig {
    }
    切面类
    与半注解形式一样
    测试类
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = SpringConfig.class)
    public class Demo2 {@Autowiredprivate AccountService accountService;@Testpublic void run1(){accountService.save();}
    }
    出现异常时:前置方法,最终方法,异常方法都会执行
    http://www.dtcms.com/wzjs/303767.html

    相关文章:

  1. 绕过asp限制进入网站后台最好用的搜索引擎
  2. 做网站多久链接提交
  3. 科技馆网站建设方案女儿考试没圈关键词
  4. 网站建设的费用是多少免费合作推广
  5. 男女做污污的网站推广普通话内容
  6. wordpress 后台 添加菜单北京seo公司公司
  7. 单页式网站 seoseo外链是什么意思
  8. 来年做哪些网站能致富怎么搭建一个网站
  9. 企业网站模板中文天津seo渠道代理
  10. 购物类网站建设方案站长统计网站
  11. 深圳网站制作的公司有哪些打开百度一下网页版
  12. 自己做的网站 怎么放大文件今日油价92汽油价格
  13. 漫画网站建设网站推广计划书
  14. ps怎样做网站大图aso优化运营
  15. 合肥做网站汇站网淘宝直通车推广怎么做
  16. 美国网站域名后缀推广普通话演讲稿
  17. 做网站销售怎么做seo接单平台有哪些
  18. 微信小程序开发定制公司网站排名优化软件
  19. 快递网站建设日程表关键词搜索量全网查询
  20. 顺德网站制作案例价格代运营公司排名
  21. 电商网站建设概念网站查询入口
  22. wordpress 1h 1gseo咨询岳阳
  23. 南宁做网站找哪家公司青岛网站建设微动力
  24. 肥东网站建设产品seo标题是什么
  25. 模仿别人网站侵权自媒体135免费版下载
  26. 简单网上书店网站建设php沧州网站seo
  27. 国外公司网站模板百度下载免费安装
  28. 做网站建设的目的html网页制作成品
  29. 计算机的专业有哪些黑帽seo工具
  30. 衣服图案设计网站网络营销的营销理念