1.创建Maven项目,项目名称springdemo50,如图所示
2.配置Maven,修改项目中的pom.xml文件,修改内容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>1.0.0</modelVersion> <groupId>shequ</groupId> <artifactId>springdemo13</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.7</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <repositories> <repository> <id>codelds</id> <url>https://code.lds.org/nexus/content/groups/main-repo</url> </repository> </repositories> <dependencies> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.1.4.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.4.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> </dependencies> <build/> </project>
3.在src/main/java下创建实体Bean Customer,包名(com.mycompany.shequ.bean)如图所示
4.实体Bean Customer的内容如下
package com.mycompany.shequ.bean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component("customerBean") public class Customer { private String name; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } @Value("#{(‘[email protected]‘ matches ‘^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)" + "*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$‘) ? ‘[email protected]‘:‘不合法‘}") public void setEmail(String email) { this.email = email; } }
5.在src/main/java下创建接口ICustomerDao,包名(com.mycompany.shequ.dao)如图所示
6.ICustomerDao的内容如下
package com.mycompany.shequ.dao; public interface ICustomerDao { public void showMe(); }
7.在src/main/java下创建ICustomerDao的实现类CustomerDaoImpl,包名
8.ICustomerDao的实现类CustomerDaoImpl的内容如下
package com.mycompany.shequ.dao.impl; import com.mycompany.shequ.dao.ICustomerDao; public class CustomerDaoImpl implements ICustomerDao { public void showMe() { System.out.println("I‘m CustomerDaoImpl"); } }
9.在src/main/java下创建业务Bean ICustomerService接口,包名(com.mycompany.shequ.service)如图所示
10.ICustomerService接口的内容如下
package com.mycompany.shequ.service; public interface ICustomerService { public void showMe(); }
11.在src/main/java下创建业务Bean ICustomerService接口的实现类CustomerServiceImpl,包名(com.mycompany.shequ.service.impl)如图所示
12.业务Bean ICustomerService接口的实现类CustomerServiceImpl的内容如下
package com.mycompany.shequ.service.impl; import com.mycompany.shequ.dao.ICustomerDao; import com.mycompany.shequ.service.ICustomerService; public class CustomerServiceImpl implements ICustomerService { private ICustomerDao customerDao; public ICustomerDao getCustomerDao() { return customerDao; } public void setCustomerDao(ICustomerDao customerDao) { this.customerDao = customerDao; } public void showMe() { customerDao.showMe(); } }
13.在src/main/java下创建前置通知实现类MethodBefore,包名(com.mycompany.shequ.service.impl)如图所示
14.前置通知实现类MethodBefore的内容如下
package com.mycompany.shequ.service.impl; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; /** * 方法执行前通知 * @author Administrator * */ public class MethodBefore implements MethodBeforeAdvice { public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { System.out.println("前置通知被执行"); } }
15.在src/main/java下创建后置通知实现类MethodAfter,包名(com.mycompany.shequ.service.impl)如图所示
16.后置通知实现类MethodAfter的内容如下
package com.mycompany.shequ.service.impl; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; /** * 方法执行完成后通知 * @author Administrator * */ public class MethodAfter implements AfterReturningAdvice { public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable { System.out.println("后置通知被执行"); } }
17.在src/main/java下创建异常通知实现类ThrowException,包名(com.mycompany.shequ.service.impl)如图所示
18.异常通知实现类ThrowException的内容如下
package com.mycompany.shequ.service.impl; import org.springframework.aop.ThrowsAdvice; /** * 抛出异常后通知 * @author Administrator * */ public class ThrowException implements ThrowsAdvice { public void afterThrowing(IllegalArgumentException e) throws Throwable{ System.out.println("异常通知被执行"); } }
19.在src/main/java下创建环绕通知实现类AroundMethod,包名(com.mycompany.shequ.service.impl)如图所示
20.环绕通知实现类AroundMethod的内容如下
package com.mycompany.shequ.service.impl; import java.util.Arrays; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; /** * 环绕通知 * @author Administrator * */ public class AroundMethod implements MethodInterceptor { public Object invoke(MethodInvocation method) throws Throwable { System.out.println("环绕通知被执行"); System.out.println("方法名称:"+method.getMethod().getName()); System.out.println("方法参数:"+Arrays.toString(method.getArguments())); Object result = method.proceed(); return result; } }
21.在src/main/resource下创建核心的配置文件applicationContext.xml,如图所示
22.配置文件applicationContext.xml,如图所示
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- customer dao Bean --> <bean id="customerDao" class="com.mycompany.shequ.dao.impl.CustomerDaoImpl"></bean> <!-- customer 业务层 Bean --> <bean id="customerService" class="com.mycompany.shequ.service.impl.CustomerServiceImpl"> <property name="customerDao" ref="customerDao"></property> </bean> <!-- 方法执行前通知 --> <bean id="methodBeforeBean" class="com.mycompany.shequ.service.impl.MethodBefore"></bean> <!-- 方法执行完成后通知 --> <bean id="methodAfterBean" class="com.mycompany.shequ.service.impl.MethodAfter"></bean> <!-- 抛出异常后通知 --> <bean id="throwExceptionBean" class="com.mycompany.shequ.service.impl.ThrowException"></bean> <!-- 环绕通知 --> <bean id="aroundMethodBean" class="com.mycompany.shequ.service.impl.AroundMethod"></bean> <bean id="customerServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="customerService"></property> <property name="interceptorNames"> <list> <!-- methodBeforeBean是前置通知Bean的名称 --> <value>methodBeforeBean</value> <!-- methodAfterBean是后置通知Bean的名称 --> <value>methodAfterBean</value> <!-- throwExceptionBean是异常通知Bean的名称 --> <value>throwExceptionBean</value> <!-- aroundMethodBean是环绕通知Bean的名称 --> <value>aroundMethodBean</value> </list> </property> </bean> </beans>
23.在src/test/java下创建测试文件AppTest,包名(com.mycompany.shequ.test)如图所示
24.测试文件AppTest的内容如下
package com.mycompany.shequ.test; import org.junit.Test; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.mycompany.shequ.service.ICustomerService; public class AppTest { @Test public void beanTest(){ ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); ICustomerService customerService = (ICustomerService) context.getBean("customerServiceProxy"); customerService.showMe(); } }
25.在测试类AppTest的beanTest方法上右键运行,输出结果如图所示
时间: 2024-11-05 12:32:57