欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

spring3.0听课学习笔记(二)

Java Web water 2646℃ 0评论

AOP(面向切面编程)Aspect-Oriented-Programming

和面向对象编程互相补充,一个是横向、一个是纵向

UserDaoImpl->save(前后加日志)用什么办法

方法前后添加逻辑

第一种方式-》直接加代码

如果没有源码

第二种方法-》利用继承(重写方法)前后加逻辑(能不用继承, 就不用)

第三种方式->实现接口implements UserDao(使用组合)

UserDao userDao = new UserDaoImpl1

 

Public class LogIntercepter 写日志的方法

动态代理,jdk里面可以产生动态代理Proxy ,InvocationHandler( 动态代理)

Aop 面试的时候问的特别多(回答出来,成功会很高,薪水也会高)

要动态代理的类需要继承一个接口。 不过hibernate不需要。直接改2进制

 

 

Public class LogInterceptor implements InvocationHandler {

Private Object target;(加上set、get方法)

 

Pubic void beforeMethod(){

 

}

 

Public Object invoke(Object org0, Method m, Object[] args) thows Throwable{

beforeMethod();

m.invoke(target, args);

return null;

}

}

 

、、产生代理对象,首先参数一个被代理对象

 

测试方法

Public void testProxy(){

UserDAO userDAO = new UserDAOImpl();

LogInterceptoer li = new LogIntercepter();

li.setTarget(userDAO);

 

UserDAO

userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDao.getClass().getClassLoader(), new class[]{UserDAO.class}, li);

 

userDAOProxy.save(new User);

}

 

对一些方法前后需要加个逻辑(用动态代理)

设计更好的,动态想加就加。(利用配置文件配置),想用就用

 

 

什么是AOP,AOP的作用,面向对象编程是一条线。面向切面是在这条线的某一处切一刀添加逻辑(方法本身不知道)

 

AOP都用在哪写方面(1.权限、2日志、3效率、4事务、5异常的管理)

业务逻辑是主要内容,每个文件都加上权限、日志、效率、累代码很繁琐

原来的业务内容上加了一些内容,没法专注一个业务了

去掉、拿掉不方便

写程序不需要处理异常了,自己单独写个业务逻辑,配置文件控制想给哪个方法的异常

 

Servelit 的Filter的思想就是AOP思想,struts2的Interceptor

Spring两种动态代理的方式(xml、annocation)

 

<aop:aspect-autoproxy/>可以使用aspect注解的方式产生动态代理

Aspect是面向切面的框架,专门产生动态代理,spring使用了它

 

@Aspect @Before(在方法执行之前执行)

把逻辑织入到哪个对象哪个方法(spring管理的)

切入点语法

 

@Aspect

@Componet

Public class LogInterceptor {

@Before(“execution(public

void com.bjxst.dao.impl.UserDAOImpl.save(com.bjsxt.model.User))”)

 

public void befor() {

System.out.println(“method.start”);

}

}

Aop的一些概念需要了解就行了。

 

一个东西要想形成一定规模,一定要把一些术语提炼出来,建立一门科学。这些术语提炼一定要精确,详细。

AOP概念

JoinPoint(连接点、切入点)@Before

 

PointCut(“execution(* com.xyz.someapp.service.*.*(..))”)->切点、切入点集合,一下定义多个切入点

 

Aspect(切面),切面类好多方法加到不同的被代理的类的方法上,指的切面类

 

Advice(建议) 指的切面类的逻辑,加到切入点上的逻辑

 

Target(被切入对象)

 

Weave(织入)

 

 

其他advice、织入点语法

@AfterReturning(参数)

@AfterThrowing(参数)

@After(参数)指finally

@Around(参数)指环绕 —》责任链模式

 

 

@Pointcut(execution(* com.xyz.someapp.service..*.*(..))”)–à公用的advice

Public void myMethod(){};

 

@Before(“myMethod()”)

声明似的异常处理,struts2已经实现。把异常在页面显示

 

@Around(“myMethod()”)

Public void aroundMethod(ProceedingJoinPoint pjp) thows Throwable{

System.out.println(“start”);

pjp.proceed();

System.out.println(“start”);

}

 

@Before和@Around哪个先执行哪个后执行。不要依赖这种先后顺序

没有实现接口的,它直接调用cglib库,2进制实现动态代理,实现AOP

 

 

Xml方式实现aop(必须掌握)

<aop:aspect-autoproxy/>这个不需要啦

<bean id =”logInterceptor” class=”com.bjsxt.aop.LogInterceptor”></bean>

<aop:config>

<aop:pointcut expression=* com.xyz.someapp.service..*.*(..))” id=”servicePointct”>

</aop:pointcut>(这个也可以加到aspect里面,表示局部的)

<aop:aspect id =”logAspect” ref=”logInterceptor”>

<aop:before method=”before” pointcut-ref=”servicePoint” />

<aop:before method=”before” pointcu =” com.xyz.someapp.service..*.*(..))” /> //同上

</aop:aspect>

</aop:config>

考虑用xml好还是用annocation好,xml是经常使用的,切面类是我们自己写的,将来你用的切面类是第三方提供的。用别人的切面类逻辑时只能用xml配置

 

必须理解AOP的概念,必须理解,面试经常问到

长得越难看,成就就越大,我这辈子成就不会太大了

 

不理解动态代理就不会理解AOP

Spring两大核心概念IOC和AOP(学习到25)

转载请注明:学时网 » spring3.0听课学习笔记(二)

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!