当前位置:编程学习 > JAVA >>

spring的框架aop应用

最近尝试用不同的方法配置aop实现,发现出了好多问题,网上也看了一些方法,但是多数是一些小demo的应用,并没有在web框架中加入aop,具体问题

用注解方式对service加上aop

AbstractApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
// ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
personService = (PersonService)cxt .getBean("personService");
personService.save("save()你好!");
用这种方法直接用junit调试的时候可以织入相应的before方法
@Aspect
public class BeforeAdvice implements MethodBeforeAdvice{

private final Logger log = Logger.getLogger(BeforeAdvice.class);

@Pointcut("execution(* com.cloud.cn.action.ProductAction.*(..))")
public void anyMethod() {}


@Before("anyMethod()")
public void doAccessCheck() {
System.out.println("前置通知?");
}

但是当我直接放入web程序中时
@Controller("productAction")
@Scope("prototype")
@RequestMapping("/product")
public class ProductAction {

@Resource
private ProductService productService;
private List<Product> productList = new ArrayList<Product>();

@RequestMapping("/getProductList.do")
public String getProductList() {

Product product = new Product();

productList = productService.getProductList(product);

return "productList";

}
}

跳转页面的时候却不能织入before方法,不明白为什么 --------------------编程问答-------------------- 在web中必须在web.xml中进行配置好spring,然后在applicationContext.xml中配置上aop事务,这很明显和在junit中不一样。不能直接放入web程序的。 --------------------编程问答-------------------- 我已经全部配置好了
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<listener>  
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
</listener>  
<context-param>  
<param-name>contextConfigLocation</param-name>  
<param-value>classpath:applicationContext.xml</param-value>  
</context-param>  
<servlet>  
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
<init-param>  
<param-name>contextConfigLocation</param-name>  
<param-value>classpath:spring-servlet.xml</param-value>  
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>  
<servlet-name>springmvc</servlet-name>  
<url-pattern>*.do</url-pattern>
</servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

	<!-- 启动扫描所有的controller -->
    <context:component-scan base-package="com.cloud.cn"/>
    
    <context:annotation-config/>
    
<!-- 开启aop注解  -->
<aop:aspectj-autoproxy/>

项目 也启动了,但是就是aop没有织入
在applicationContext里面配置
<aop:config>
    <aop:pointcut id="servicePointcut" expression="execution(* com..*.product.action.*.*(..))"/>
    <!-- 切面 -->
        <aop:aspect id="myAop" ref="beforeAdvice">
            <!-- 执行的切面方法 -->
            <aop:before method="beforeLogin" pointcut-ref="servicePointcut" />
        </aop:aspect>
  </aop:config>

这样程序可以织入before,但是我想用注解,不用shema配置 --------------------编程问答-------------------- 太深澳了,对于我们初学者,只要会用一种就可以了。 --------------------编程问答-------------------- 有人解释下注解模式的aop配置么
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,