spring aop 두 가지 설정 방식

8488 단어 springaop주해xml
첫 번째: 메모 구성 AOP
메모 구성 AOP(AspectJ 클래스 라이브러리를 사용하여 구현됨)는 크게 세 단계로 나뉩니다.
1. 메모 @Aspect를 사용하여 탄젠트를 정의하고 탄젠트(@Pointcut), 알림 유형(@Before, @AfterReturning, @After, @AfterThrowing, @Around)을 탄젠트에 정의합니다.
2. 차단해야 할 종류를 개발한다.
3. 절단면을 xml에 배치하면 물론 우리는 자동으로 Bean을 스캔하는 방식을 사용할 수 있다.그러면 Spring AoP 컨테이너에서 관리합니다.
또한aspectJ의jar가방:aspectjweaver를 인용해야 합니다.jar aspectjrt.jar
인스턴스:

User.java

package com.bjsxt.model; 
 
public class User { 
 private String username; 
 private String password; 
 public String getUsername() { 
 return username; 
 } 
 public void setUsername(String username) { 
 this.username = username; 
 } 
 public String getPassword() { 
 return password; 
 } 
 public void setPassword(String password) { 
 this.password = password; 
 } 
} 
/** 
*  
*/ 
package com.bjsxt.dao; 
import com.bjsxt.model.User; 
 
 
public interface UserDAO { 
 public void save(User user); 
} 

구현 인터페이스:

package com.bjsxt.dao.impl; 
 
import org.springframework.stereotype.Component; 
 
import com.bjsxt.dao.UserDAO; 
import com.bjsxt.model.User; 
 
@Component("u") 
public class UserDAOImpl implements UserDAO { 
 
 public void save(User user) { 
 
 System.out.println("user save11d!"); 
 /*throw new RuntimeException("exception");*/ //  
 } 
 
}
작업 클래스:

package com.bjsxt.service; 
import javax.annotation.Resource; 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.stereotype.Component; 
 
import com.bjsxt.dao.UserDAO; 
import com.bjsxt.model.User; 
 
 
@Component("userService") 
public class UserService { 
 
 private UserDAO userDAO; 
 
 public void init() { 
 System.out.println("init"); 
 } 
 
 public void add(User user) { 
 userDAO.save(user); 
 } 
 public UserDAO getUserDAO() { 
 return userDAO; 
 } 
 
 @Resource(name="u") 
 public void setUserDAO( UserDAO userDAO) { 
 this.userDAO = userDAO; 
 } 
 
 public void destroy() { 
 System.out.println("destroy"); 
 } 
} 
aop 가입

package com.bjsxt.aop; 
 
import org.aspectj.lang.annotation.After; 
import org.aspectj.lang.annotation.AfterReturning; 
import org.aspectj.lang.annotation.AfterThrowing; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 
import org.springframework.stereotype.Component; 
 
@Aspect 
@Component 
public class LogInterceptor { 
 @Pointcut("execution(public * com.bjsxt.service..*.add(..))") 
 public void myMethod(){}; 
 
 /*@Before("execution(public void com.bjsxt.dao.impl.UserDAOImpl.save(com.bjsxt.model.User))")*/ 
 @Before("myMethod()") 
 public void before() { 
 System.out.println("method staet"); 
 } 
 @After("myMethod()") 
 public void after() { 
 System.out.println("method after"); 
 } 
 @AfterReturning("execution(public * com.bjsxt.dao..*.*(..))") 
 public void AfterReturning() { 
 System.out.println("method AfterReturning"); 
 } 
 @AfterThrowing("execution(public * com.bjsxt.dao..*.*(..))") 
 public void AfterThrowing() { 
 System.out.println("method AfterThrowing"); 
 } 
} 
프로파일

<?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:context="http://www.springframework.org/schema/context" 
 xmlns:aop="http://www.springframework.org/schema/aop" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-2.5.xsd 
 http://www.springframework.org/schema/aop 
 http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
 "><!--  2  --> 
 
 <context:annotation-config /> 
 <context:component-scan base-package="com.bjsxt"/> <!--   --> 
 <aop:aspectj-autoproxy/> <!--   --> 
</beans> 
테스트 클래스:

package com.bjsxt.service; 
import org.junit.Test; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
 
import com.bjsxt.model.User; 
 
//Dependency Injection 
//Inverse of Control 
public class UserServiceTest { 
 
 @Test 
 public void testAdd() throws Exception { 
 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
 
 
 UserService service = (UserService)ctx.getBean("userService"); 
 System.out.println(service.getClass()); 
 service.add(new User()); 
 System.out.println("###"); 
 
 ctx.destroy(); 
 
 } 
 
} 
결과:

class com.bjsxt.service.UserService$$EnhancerByCGLIB$$7b201784
method staet
user save11d!
method AfterReturning
method after
###

참고:
@Aspect: 이 클래스가 절단면류라는 뜻이에요.
@Componet: 절단면류로 Spring을 관리해야 하기 때문에 초기화할 때 이 클래스를 Spring의 관리에 초기화해야 합니다.
@Befoe: 접점에 대한 논리(Advice)
execution...: 삽입점 문법
두 번째: xml 설정 aop
인스턴스와 동일: 구성 파일만 다를 뿐

<?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:context="http://www.springframework.org/schema/context" 
 xmlns:aop="http://www.springframework.org/schema/aop" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-2.5.xsd 
 http://www.springframework.org/schema/aop 
 http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
 "><!--  2  --> 
 
 <context:annotation-config /> 
 <context:component-scan base-package="com.bjsxt"/> 
 <bean id="logInterceptor" class="com.bjsxt.aop.LogInterceptor"></bean> 
 <aop:config> 
 <aop:pointcut expression="execution(public * com.bjsxt.service..*.add(..))" 
 id="servicePointcut"/> 
 <aop:aspect id="logAspect" ref="logInterceptor"> 
 <aop:before method="before" pointcut-ref="servicePointcut" /> 
 </aop:aspect> 
 
 </aop:config> 
</beans> 
다음 는 Spring의 설정 탭입니다. beans의 몇 가지 중요한 속성:
xmlns:
기본 xml 문서 해석 형식, 즉spring의 beans입니다.주소http://www.springframework.org/schema/beans.
이 속성을 설정하면 beans에서 설명한 모든 속성은 <>를 통해 직접 사용할 수 있습니다. 예를 들어 등등.
xmlns:xsi:
xml이 준수해야 할 규범입니다. URL을 통해 알 수 있듯이 w3의 통일된 규범입니다. 뒤에 xsi:schemaLocation을 통해 모든 해석 파일을 포지셔닝합니다.
xmlns:aop:
이것은 중점이다. 우리가 여기서 사용해야 할 의미 규범이다. 이것은 절단면 AOP와 관련이 있다.
xmlns:tx:
Spring의 트랜잭션 관련 구성 내용입니다.
XML 파일은 기본 의미 해석의 사양명세만 선언할 수 있습니다.
예를 들어 위의 xml에는 beans 하나만 기본이고 다른 것은 모두 특정한 탭을 통해 사용해야 한다. 예를 들어 aop은 자체적으로 많은 속성을 가지고 있다. 만약에 사용하려면 앞에 aop:xx를 추가해야 한다.예를 들어 위의 aop:config.
이와 유사하게 기본 xmlns가 aop와 관련된 의미 해석 규범을 설정하면 xml에서config라는 라벨을 직접 쓸 수 있습니다.
이상은spring aop 두 가지 설정 방식입니다. 아시겠어요?이후spring aop 두 가지 설정 방식에 대한 글이 더 많이 올라와 있으니 계속 지켜봐 주세요.

좋은 웹페이지 즐겨찾기