`
dexter_leslie
  • 浏览: 65062 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论
  • marrymyy: 楼主总结的很好,学习了,就是代码怎么都没有空格断开,看着很不爽 ...
    interceptor

spring入门

阅读更多

1.第一个例子

1)定义接口

ServiceBean.java

public interface ServiceBean {

 public void addUser();

 public void deleteUser();

 public void updateUser();

 public void findUser();
}

2)实现接口

MyServiceBean.java


public class MyServiceBean implements ServiceBean {

 public void addUser() {
  System.out.println("addUser()");
 }

 public void deleteUser() {
  System.out.println("deleteUser()");
 }

 public void findUser() {
  System.out.println("findUser()");
 }

 public void updateUser() {
  System.out.println("updateUser()");
 }

}

 

3)编写spring配置文件beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <bean id="serviceTarget" class="com.dexter.service.MyServiceBean" />
 </beans>

 

4)请求spring生成servicebean

public class Main {

 public static void main(String[] args) {
  XmlBeanFactory xb = new XmlBeanFactory(new ClassPathResource("beans.xml"));
  ServiceBean sb = (ServiceBean)xb.getBean("service");
  sb.addUser();
  xb.destroySingletons();
 }
}

 

2.初步spring aop

1)编写一个LogAdvisor类,这个类是实现MethodBeforeAdvisor接口,实现其中的方法,这个方法在主业务方法 被调用前调用。

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class LogAdvisor implements MethodBeforeAdvice {

 @Override
 public void before(Method m, Object[] args, Object target)
   throws Throwable {
  System.out.println("[Log] " + target.getClass().getName() + "." + m.getName() + "()");
 }
}

 

2)编写beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <bean id="serviceTarget" class="com.dexter.service.MyServiceBean" />
 <bean id="logAdvisor" class="com.dexter.service.LogAdvisor"></bean>

 

<!--请求ProxyFactoryBean类生成代理对象-->

 <bean id="service"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">
   <value>com.dexter.service.ServiceBean</value>
  </property>
  <property name="target">
   <ref local="serviceTarget" />
  </property>
  <property name="interceptorNames">
   <list>
    <value>logAdvisor</value>
   </list>
  </property>
 </bean>
</beans>

 

3)调用

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Main {

 public static void main(String[] args) {
  XmlBeanFactory xb = new XmlBeanFactory(new ClassPathResource("beans.xml"));
  ServiceBean sb = (ServiceBean)xb.getBean("service");
  sb.addUser();
  xb.destroySingletons();
 }
}

 

3.编写方法过滤器,编写MethodAdvisor类

1) 编写MethodAdvisor.java


public class MethodAdvisor implements MethodInterceptor {

 @Override
 public Object invoke(MethodInvocation m) throws Throwable {
  m.proceed();
  System.out.println("MethodAdvisor invoked,"+m.getMethod().getName());
  return "MethodAdvisor invoked";
 }

}


2)写配置文件,请求RegexpMethodPointcutAdvisor类过滤指定的方法

<bean id="methodAdvisorTarget"
  class="com.dexter.service.MethodAdvisor">
 </bean>

<bean id="methodAdvisor"
  class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
  <property name="advice">
   <ref local="methodAdvisorTarget" />
  </property>
  <property name="patterns">
   <list>

   <!--过滤addUser这个指定的方法-->
    <value>.*addUser</value>
   </list>
  </property>
 </bean>

 

<bean id="service"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">
   <value>com.dexter.service.ServiceBean</value>
  </property>
  <property name="target">
   <ref local="serviceTarget" />
  </property>
  <property name="interceptorNames">
   <list>
    <value>logAdvisor</value>
    <value>methodAdvisor</value>
   </list>
  </property>
 </bean>

 

4.异常aop

1)编写ExceptionAdvisor类

import org.springframework.aop.ThrowsAdvice;

public class ExceptionAdvisor implements ThrowsAdvice {
 public void afterThrowing(RuntimeException re) throws Throwable {
  System.out.println("[Exception] " + re.getMessage());
 }
}

 

2)配置beans.xml

<bean id="service"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">
   <value>com.dexter.service.ServiceBean</value>
  </property>
  <property name="target">
   <ref local="serviceTarget" />
  </property>
  <property name="interceptorNames">
   <list>
    <value>logAdvisor</value>
    <value>passwordAdvisor</value>
    <value>exceptionAdvisor</value>
   </list>
  </property>
 </bean>

 

3)如果在业务方法执行时候有异常,那么ExceptionAdvisor的afterThrowing方法被执行

 

分享到:
评论

相关推荐

    一本很不错的关于spring入门的书籍

    这本书籍“一本很不错的关于spring入门的书籍”显然是针对初学者设计的,旨在帮助新手快速掌握Spring的基本概念和核心功能。 Spring框架的核心特性包括: 1. **依赖注入(Dependency Injection,简称DI)**:这是...

    spring入门代码项目

    《Spring入门代码项目详解》 在IT行业中,Spring框架无疑是最受欢迎的Java企业级应用开发框架之一。本项目旨在帮助初学者快速入门Spring,通过实际的代码操作来理解和掌握Spring的核心概念与用法。以下是对每个子...

    spring入门经典+源代码

    spring入门经典+源代码.Spring入门经典 一书全面透彻地介绍Spring Framework;Spring Framework是Java开发领域最流行的框架,是事实上的企业级应用开发标准。本书浓墨重彩地描述实际的企业级解决方案,每一章都提供了...

    Spring入门教程.rar

    Spring框架是Java开发中...本教程的文档《Spring入门教程.doc》将深入讲解这些概念,并提供实例代码和步骤说明,帮助你从零开始学习Spring,逐步成长为一名熟练的Spring开发者。请打开文档,开始你的Spring学习之旅吧!

    《Spring入门经典》源代码

    《Spring入门经典》是一本由Mert Caliskan和Kenan Sevindik共同撰写的书籍,主要面向希望深入理解并掌握Spring框架的初学者。Spring是Java领域中最为广泛使用的开源框架,它提供了一个全面的编程和配置模型,旨在...

    spring入门经典源代码

    本资源"Spring入门经典源代码"旨在帮助初学者快速理解并掌握Spring框架的核心概念和使用方法。这本书籍结合了丰富的示例代码,使得理论与实践相结合,使学习过程更加直观和高效。 1. **Spring概述** Spring是一个...

    spring入门介绍PPT.rar

    Spring框架是中国Java开发领域中最广泛使用的轻量级框架之一,它以其依赖注入...这份"spring入门介绍PPT"将是你深入理解Spring的宝贵资源,通过它,你可以逐步掌握Spring的核心理念和技术,开启你的Spring开发之旅。

    spring入门经典-附源代码

    《Spring入门经典》是一本专为初学者和有一定基础的开发者设计的教程,它通过附带的源代码帮助读者深入理解并快速掌握Spring框架。Spring是Java开发领域中最为广泛应用的轻量级框架,它的核心特性包括依赖注入、面向...

    spring入门相关jar包

    spring入门相关jar包,相关jar包为: commons-logging-1.2.jar spring-beans-5.2.6.RELEASE.jar spring-context-5.2.6.RELEASE.jar spring-core-5.2.6.RELEASE.jar spring-expression-5.2.6.RELEASE.jar

    spring入门经典源码第二章

    《Spring入门经典》第二章主要围绕Spring Framework的基础知识展开,旨在为初学者提供一个全面而深入的Spring学习路径。Spring Framework作为Java开发的核心框架,它以其模块化、易用性和强大的功能深受开发者喜爱,...

    Spring入门教学(解决方案)Spring入门教学(解决方案)Spring入门教学(解决方案)

    Spring入门教学(解决方案)Spring入门教学(解决方案)Spring入门教学(解决方案)Spring入门教学(解决方案)Spring入门教学(解决方案)Spring入门教学(解决方案)Spring入门教学(解决方案)Spring入门教学(解决方案)Spring...

    《Spring入门经典》书中示例代码

    《Spring入门经典》是一本深度剖析Spring框架的入门书籍,旨在帮助初学者快速掌握Spring的核心概念和使用方法。书中的示例代码是理论知识的实践体现,通过这些代码,读者可以直观地理解Spring如何工作,如何配置,...

    Spring入门级教程.pptx

    Spring入门级教程,从零开始教你认识Spring,了解Spring,理解Spring的两大核心IoC和AOP,教你如何使用Spring进行开发

    Spring入门

    Spring入门,关于Spring的详细解释以及spring的工作原理!

    Spring入门经典

    Spring入门经典 一书全面透彻地介绍Spring Framework;Spring Framework是Java开发领域最流行的框架,是事实上的企业级应用开发标准。本书浓墨重彩地描述实际的企业级解决方案,每一章都提供了通俗易懂的示例和动手...

    Spring入门书籍

    《Spring入门书籍》是一本专为初学者设计的Spring框架学习指南。这本书旨在帮助读者从零开始,逐步掌握Spring框架的基础知识和核心概念,从而在实际项目开发中得心应手。Spring作为Java企业级应用的主流框架,其强大...

    spring 入门基础

    《Spring入门基础详解》 Spring框架作为Java领域中极为重要的轻量级容器,以其强大的功能和易用性深受开发者喜爱。本教程将带你逐步走进Spring的世界,了解其核心概念,并教你如何在Eclipse环境中搭建Spring开发...

    Spring入门案例

    首先,我们来解析一下标题"Spring入门案例"。这表明我们将学习的是Spring的基本概念和基础应用,包括如何搭建Spring项目环境,配置Spring容器,以及如何使用Spring管理Bean。Spring框架的核心是IoC(Inversion of ...

Global site tag (gtag.js) - Google Analytics