동적 프록시 jdk 및 cglib
23212 단어 cglib
jdk
package com.kite.dao.jdkproxy;
/**
* person
* @author admin
*
*/
public class Person
{
private Long pid;
private String pname;
public Long getPid()
{
return pid;
}
public void setPid(Long pid)
{
this.pid = pid;
}
public String getPname()
{
return pname;
}
public void setPname(String pname)
{
this.pname = pname;
}
}
1 package com.kite.dao.jdkproxy;
2
3 import java.util.List;
4 /**
5 *
6 * @author admin
7 *
8 */
9 public interface PersonDao
10 {
11 public void savePerson();
12 public void updatePerson();
13 public void deletePerson();
14 public List<Person> getPerson();
15 }
package com.kite.dao.jdkproxy;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author admin
*
*/
public class PersonDaoImpl implements PersonDao
{
@Override
public void savePerson()
{
System.out.println("save person");
}
@Override
public void updatePerson()
{
System.out.println("update person");
}
@Override
public void deletePerson()
{
System.out.println("delete person");
}
@Override
public List<Person> getPerson()
{
List<Person> list = new ArrayList<Person>();
Person p = new Person();
p.setPname("kite");
p.setPid(1L);
list.add(p);
for(Person person : list)
{
System.out.println(person.getPname());
}
return null;
}
}
1 package com.kite.dao.jdkproxy;
2 /**
3 *
4 * @author admin
5 *
6 */
7 public class Transaction
8 {
9 public void beginTransaction()
10 {
11 System.out.println("begin transaction");
12 }
13 public void commitTransaction()
14 {
15 System.out.println("commit transaction");
16 }
17
18
19 }
1 package com.kite.dao.jdkproxy;
2
3 import java.lang.reflect.InvocationHandler;
4 import java.lang.reflect.Method;
5
6 /**
7 *
8 * @author admin
9 *
10 */
11 public class PersonDaoInteceptor implements InvocationHandler
12 {
13
14 private Transaction transaction;
15 public Object target;
16 public PersonDaoInteceptor(Object target, Transaction transaction)
17 {
18 this.transaction = transaction;
19 this.target = target;
20 }
21 @Override
22 public Object invoke(Object proxy, Method method, Object[] args)
23 throws Throwable
24 {
25 Object obj;
26 String methodName = method.getName();
27 if("savePerson".equals(methodName) || "updatePerson".equals(methodName) || "deletePerson".equals(methodName))
28 {
29 transaction.beginTransaction();
30 obj = method.invoke(target, args);
31 transaction.commitTransaction();
32 }else
33 {
34 obj = method.invoke(target, args);
35 }
36 return obj;
37 }
38
39 }
1 package com.kite.dao.jdkproxy;
2
3 import java.lang.reflect.Proxy;
4
5 import org.junit.Test;
6 /**
7 *
8 */
9 public class PersonDaoTest
10 {
11 @Test
12 public void test()
13 {
14 Transaction transaction = new Transaction();
15 PersonDao personDao = new PersonDaoImpl();
16 //
17 PersonDaoInteceptor interceptor = new PersonDaoInteceptor(personDao, transaction);
18 //
19 PersonDao proxy = (PersonDao) Proxy.newProxyInstance(personDao.getClass().getClassLoader(), personDao.getClass().getInterfaces(), interceptor);
20 //
21 proxy.getPerson();
22 }
23 }
cglib 방식은 수정만 하면 됩니다
1 package com.kite.dao.jdkproxy;
2
3 import java.lang.reflect.InvocationHandler;
4 import java.lang.reflect.Method;
5
6 /**
7 *
8 * @author admin
9 *
10 */
11 public class PersonDaoInteceptor implements InvocationHandler
12 {
13
14 private Transaction transaction;
15 public Object target;
16 public PersonDaoInteceptor(Object target, Transaction transaction)
17 {
18 this.transaction = transaction;
19 this.target = target;
20 }
21 @Override
22 public Object invoke(Object proxy, Method method, Object[] args)
23 throws Throwable
24 {
25 Object obj;
26 String methodName = method.getName();
27 if("savePerson".equals(methodName) || "updatePerson".equals(methodName) || "deletePerson".equals(methodName))
28 {
29 transaction.beginTransaction();
30 obj = method.invoke(target, args);
31 transaction.commitTransaction();
32 }else
33 {
34 obj = method.invoke(target, args);
35 }
36 return obj;
37 }
38
39 }
테스트
1 package com.kite.dao.cglibproxy;
2
3 import java.lang.reflect.Proxy;
4
5 import org.junit.Test;
6
7 public class PersonDaoTest
8 {
9 @Test
10 public void test()
11 {
12 Transaction transaction = new Transaction();
13 PersonDao target = new PersonDaoImpl();
14 //
15 PersonDaoInteceptor inteceptor = new PersonDaoInteceptor(target, transaction);
16 //
17 PersonDaoImpl proxy = (PersonDaoImpl) inteceptor.createProxy();
18 proxy.getPerson();
19 }
20 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 에이전트(jdk 정적 에이전트, 동적 에이전트와 cglib 동적 에이전트)2. jdk 정적 에이전트 에이전트 클래스 System.out.println ("사무가 끝났습니다."); 3. jdk 동적 에이전트 에이전트 클래스 4. 에이전트 클래스 3. jdk 동적 에이전트는 인터페이스 에이전...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.