package com.qfedu.aop01;
import org.junit.Test;
public class TestAOP01 {
? ? public void testUserService(){
? ? ? ? IUserService us = new UserservcieImpl();
? ? ? ? System.out.println(us.getAllUser());
? ? ? ? System.out.println(us.updateUser(new Object()));
? ? ? ? System.out.println(us.deleteUser(1));
? ? ? ? System.out.println(us.saveUser(new Object()));
? ? ? ? System.out.println("===============");
? ? ? ? IUserService us2 = UserFactory.getUserService();
? ? ? ? System.out.println(us2.getAllUser());
? ? ? ? System.out.println(us2.updateUser(new Object()));
? ? ? ? System.out.println(us2.deleteUser(2));
? ? ? ? System.out.println(us2.saveUser(new Object()));
? ? }
}
Days13Spring的AOP
區(qū)分三個概念
? ? 類闻牡, 對象只盹, 類對象
User u = new User();
User為一個類
u為一個User類的對象
User.class是User的類對象
AOP01
IUserService.java
package com.qfedu.aop01;
import java.util.List;
public interface IUserService<T> {
? ? /**
? ? * 獲取所有的用戶對象列表
? ? * @return
? ? */
? ? List<T> getAllUser();
? ? /**
? ? * 保存用戶
? ? * @param user
? ? * @return
? ? */
? ? boolean saveUser(T user);
? ? /**
? ? * 根據(jù)用戶uid刪除該uid對應(yīng)的用戶信息
? ? * @param uid
? ? * @return
? ? */
? ? boolean deleteUser(int uid);
? ? /**
? ? * 更新指定用戶信息
? ? * @param obj
? ? * @return
? ? */
? ? boolean updateUser(T obj);
}
UserServiceImpl.java
package com.qfedu.aop01;
import java.util.ArrayList;
import java.util.List;
public class UserservcieImpl implements IUserService<Object> {
? ? @Override
? ? public List<Object> getAllUser() {
? ? ? ? System.out.println("--------getAllUser----------");
? ? ? ? return new ArrayList<>();
? ? }
? ? @Override
? ? public boolean saveUser(Object user) {
? ? ? ? System.out.println("--------saveUser----------");
? ? ? ? return true;
? ? }
? ? @Override
? ? public boolean deleteUser(int uid) {
? ? ? ? System.out.println("--------deleteUser----------");
? ? ? ? return false;
? ? }
? ? @Override
? ? public boolean updateUser(Object obj) {
? ? ? ? System.out.println("--------updateUser----------");
? ? ? ? return true;
? ? }
}
MyAspect.java
package com.qfedu.aop01;
public class MyAspect {
? ? public void before(){
? ? ? ? System.out.println("********before**********");
? ? }
? ? public void after(){
? ? ? ? System.out.println("********after**********");
? ? }
}
UserFactory.java
package com.qfedu.aop01;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserFactory {
? ? public static IUserService getUserService(){
? ? ? ? IUserService us = new UserservcieImpl();
? ? ? ? MyAspect ma = new MyAspect();
? ? ? ? /**
? ? ? ? *
? ? ? ? *? 使用Proxy類的靜態(tài)方法newProxyInstance來實現(xiàn)對于目標(biāo)對象us的代理
? ? ? ? *? 目的是在原本us可以做的事情之前和之后可以做額外的事情
? ? ? ? *
? ? ? ? */
? ? ? ? IUserService ius = (IUserService) Proxy.newProxyInstance(UserFactory.class.getClassLoader(), us.getClass().getInterfaces(), new InvocationHandler() {
? ? ? ? ? ? /**
? ? ? ? ? ? * 代理對象調(diào)用的回掉方法
? ? ? ? ? ? * @param proxy 代理對象
? ? ? ? ? ? * @param method 被代理的方法
? ? ? ? ? ? * @param args 被代理方法的參數(shù)列表對象
? ? ? ? ? ? * @return 每個方法的最終返回值
? ? ? ? ? ? * @throws Throwable
? ? ? ? ? ? */
? ? ? ? ? ? @Override
? ? ? ? ? ? public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
? ? ? ? ? ? ? ? ma.before();
? ? ? ? ? ? ? ? System.out.println("000000000" + method);
? ? ? ? ? ? ? ? System.out.println("000001111" + args);
? ? ? ? ? ? ? ? Object obj = method.invoke(us, args);
? ? ? ? ? ? ? ? ma.after();
? ? ? ? ? ? ? ? System.out.println("111111111" + obj);
? ? ? ? ? ? ? ? return obj;
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? return ius;
? ? }
}
TestAOP01.java
package com.qfedu.aop01;
import org.junit.Test;
public class TestAOP01 {
? ? @Test
? ? public void testUserService(){
? ? ? ? IUserService us = new UserservcieImpl();
? ? ? ? System.out.println(us.getAllUser());
? ? ? ? System.out.println(us.updateUser(new Object()));
? ? ? ? System.out.println(us.deleteUser(1));
? ? ? ? System.out.println(us.saveUser(new Object()));
? ? ? ? System.out.println("===============");
? ? ? ? IUserService us2 = UserFactory.getUserService();
? ? ? ? System.out.println(us2.getAllUser());
? ? ? ? System.out.println(us2.updateUser(new Object()));
? ? ? ? System.out.println(us2.deleteUser(2));
? ? ? ? System.out.println(us2.saveUser(new Object()));
? ? }
}
AOP02
IUserService.java
package com.qfedu.aop02;
import java.util.List;
public interface IUserService<T> {
? ? /**
? ? * 獲取所有的用戶對象列表
? ? * @return
? ? */
? ? List<T> getAllUser();
? ? /**
? ? * 保存用戶
? ? * @param user
? ? * @return
? ? */
? ? boolean saveUser(T user);
? ? /**
? ? * 根據(jù)用戶uid刪除該uid對應(yīng)的用戶信息
? ? * @param uid
? ? * @return
? ? */
? ? boolean deleteUser(int uid);
? ? /**
? ? * 更新指定用戶信息
? ? * @param obj
? ? * @return
? ? */
? ? boolean updateUser(T obj);
}
UserServiceImpl.java
package com.qfedu.aop02;
import java.util.ArrayList;
import java.util.List;
public class UserServiceImpl<T> implements IUserService<T> {
? ? @Override
? ? public List<T> getAllUser() {
? ? ? ? System.out.println("--------getAllUser----------");
? ? ? ? return new ArrayList<>();
? ? }
? ? @Override
? ? public boolean saveUser(T user) {
? ? ? ? System.out.println("--------saveUser----------");
? ? ? ? return true;
? ? }
? ? @Override
? ? public boolean deleteUser(int uid) {
? ? ? ? System.out.println("--------deleteUser----------");
? ? ? ? return false;
? ? }
? ? @Override
? ? public boolean updateUser(T obj) {
? ? ? ? System.out.println("--------updateUser----------");
? ? ? ? return true;
? ? }
}
MyAspect.java
package com.qfedu.aop02;
public class MyAspect {
? ? public void before(){
? ? ? ? System.out.println("********before**********");
? ? }
? ? public void after(){
? ? ? ? System.out.println("********after**********");
? ? }
}
UserFactory.java
package com.qfedu.aop02;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class UserFactory {
? ? /**
? ? * 使用Spring中的一個增強類來實現(xiàn)aop方式
? ? *? ? ? 1.? 創(chuàng)建Enhancer對象
? ? *? ? ? 2.? 設(shè)置增強類Enhancer的superClass
? ? *? ? ? 3.? 設(shè)置Enhancer對象的回調(diào)
? ? *? ? ? 4.? 通過eh對象的create()方法來得到指定的對象
? ? * @return
? ? */
? ? public static IUserService getUserService(){
? ? ? ? //? 1.? 創(chuàng)建Enhancer對象
? ? ? ? Enhancer eh = new Enhancer();
? ? ? ? //? 2.? 設(shè)置增強類Enhancer的superClass
? ? ? ? eh.setSuperclass(IUserService.class);
? ? ? ? IUserService<Object> us = new UserServiceImpl<>();
? ? ? ? MyAspect ma = new MyAspect();
? ? ? ? //? 3.? 設(shè)置Enhancer對象的回調(diào)
? ? ? ? eh.setCallback(new MethodInterceptor() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
? ? ? ? ? ? ? ? ma.before();
? ? ? ? ? ? ? ? Object obj = method.invoke(us, objects);
? ? ? ? ? ? ? ? ma.after();
? ? ? ? ? ? ? ? return obj;
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? //? 4.? 通過eh對象的create()方法來得到指定的對象
? ? ? ? IUserService<Object> ius = (IUserService<Object>) eh.create();
? ? ? ? return ius;
? ? }
}
TestAOP02.java
package com.qfedu.aop02;
import org.junit.Test;
public class TestAOP02 {
? ? @Test
? ? public void testAOP02(){
//? ? ? ? IUserService<Object> us = new UserServiceImpl<>();
? ? ? ? Object o = new Object();
//? ? ? ? System.out.println(us.getAllUser());
//? ? ? ? System.out.println(us.saveUser(o));
//? ? ? ? System.out.println(us.deleteUser(1));
//? ? ? ? System.out.println(us.updateUser(o));
? ? ? ? System.out.println("==============");
? ? ? ? IUserService ius = UserFactory.getUserService();
? ? ? ? System.out.println(ius.getAllUser());
? ? ? ? System.out.println(ius.saveUser(o));
? ? ? ? System.out.println(ius.deleteUser(1));
? ? ? ? System.out.println(ius.updateUser(o));
? ? }
}
AOP03
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
? ? <bean id="us" class="com.qfedu.aop03.UserServiceImpl" />
? ? <bean id="my" class="com.qfedu.aop03.MyAspect" />
? ? <!--
? ? ? ? ProxyFactoryBean代理的FactoryBean對象胁塞,我們現(xiàn)在要代理的是us
? ? ? ? ? ? 包含四個屬性注入:
? ? ? ? ? ? ? ? 1.? interfaces: 接口對象們
? ? ? ? ? ? ? ? ? ? <list>
? ? ? ? ? ? ? ? ? ? ? ? <value>com.qfedu.aop03.IUserService</value>
? ? ? ? ? ? ? ? ? ? ? ? <value>com.qfedu.aop03.IUserService</value>
? ? ? ? ? ? ? ? ? ? ? ? <value>com.qfedu.aop03.IUserService</value>
? ? ? ? ? ? ? ? ? ? </list>
? ? ? ? ? ? ? ? 2.? target:目標(biāo)對象,哪個對象將被以代理的方式創(chuàng)建
? ? ? ? ? ? ? ? 3.? interceptorNames:攔截對象的名稱腊尚,自定義的MethodInterceptor對象机错,注意它的包結(jié)構(gòu)組成
? ? ? ? ? ? ? ? 4.? optimize:boolean類型的值:
? ? ? ? ? ? ? ? ? ? ? ? true:強制使用cglib的動態(tài)代理方式
? ? ? ? ? ? ? ? ? ? ? ? false:使用jdk自帶的動態(tài)代理
? ? ? ? ? ? ? ? ? ? ? ? cglib:code generation library枪眉,代碼生成庫狸驳,性能更高
? ? -->
? ? <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
? ? ? ? <property name="interfaces" value="com.qfedu.aop03.IUserService" />
? ? ? ? <property name="target" ref="us" />
? ? ? ? <property name="interceptorNames" value="my" />
? ? ? ? <property name="optimize" value="true" />
? ? </bean>
</beans>
IUserService.java
package com.qfedu.aop03;
import java.util.List;
public interface IUserService {
? ? /**
? ? * 獲取所有的用戶對象列表
? ? * @return
? ? */
? ? List<Object> getAllUser();
? ? /**
? ? * 保存用戶
? ? * @param user
? ? * @return
? ? */
? ? boolean saveUser(Object user);
? ? /**
? ? * 根據(jù)用戶uid刪除該uid對應(yīng)的用戶信息
? ? * @param uid
? ? * @return
? ? */
? ? boolean deleteUser(int uid);
? ? /**
? ? * 更新指定用戶信息
? ? * @param obj
? ? * @return
? ? */
? ? boolean updateUser(Object obj);
}
UserServiceImpl.java
package com.qfedu.aop03;
import org.springframework.context.ApplicationContext;
import java.util.ArrayList;
import java.util.List;
public class UserServiceImpl implements IUserService {
? ? ApplicationContext ac;
? ? @Override
? ? public List<Object> getAllUser() {
? ? ? ? System.out.println("--------getAllUser----------");
? ? ? ? return new ArrayList<>();
? ? }
? ? @Override
? ? public boolean saveUser(Object user) {
? ? ? ? System.out.println("--------saveUser----------");
? ? ? ? return true;
? ? }
? ? @Override
? ? public boolean deleteUser(int uid) {
? ? ? ? System.out.println("--------deleteUser----------");
? ? ? ? return false;
? ? }
? ? @Override
? ? public boolean updateUser(Object obj) {
? ? ? ? System.out.println("--------updateUser----------");
? ? ? ? return true;
? ? }
}
MyAspect.java
package com.qfedu.aop03;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MyAspect implements MethodInterceptor {
? ? private void before(){
? ? ? ? System.out.println("---------before----------");
? ? }
? ? private void after(){
? ? ? ? System.out.println("---------after----------");
? ? }
? ? @Override
? ? public Object invoke(MethodInvocation invocation) throws Throwable {
? ? ? ? before();
? ? ? ? //? 業(yè)務(wù)處理方法的調(diào)用
? ? ? ? Object obj = invocation.proceed();
? ? ? ? after();
? ? ? ? return obj;
? ? }
}
TestAOP03.java
package com.qfedu.aop03;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAOP03 {
? ? @Test
? ? public void testAOP03(){
? ? ? ? ApplicationContext ac = new ClassPathXmlApplicationContext("com/qfedu/aop03/beans.xml");
? ? ? ? IUserService us = ac.getBean("proxy", IUserService.class);
? ? ? ? Object o = new Object();
? ? ? ? System.out.println(us.getAllUser());
? ? ? ? System.out.println(us.deleteUser(1));
? ? ? ? System.out.println(us.saveUser(o));
? ? ? ? System.out.println(us.updateUser(o));
? ? }
}`