目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、构造注入
- 创建带参构造方法
/**
* @author lyt
* 用户类
*/
public class User {
private String name;
private String pass;
private String email;
public User() {
}
public User(String name, String pass, String email) {
this.name = name;
this.pass = pass;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
2.在Spring配置文件中通过<constructor-arg>元素为构造方法传
<!-- <constructor-arg index="0" value="荌晨" ></constructor-arg>
<constructor-arg index="1" value="you are my first choice."></constructor-arg>–>-->
- test
@Test
public void method1() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext4.xml");
logger.info(context);
UserService userService = context.getBean(UserServiceImpl.class);
logger.info(userService);
User user = new User();
user.setName("芊芊");
userService.addNewUser(user);
}
二、使用p命名空间注入属性值
1.p 命名空间的特点:
使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- p命名空间注入-->
<bean id="user" class="com.home.moredatatype.User" p:userName="张嘎" p:say="一天不运动浑身难受浑身难受"></bean>
<bean id="userDao" class="com.home.aop.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.home.aop.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>
</beans>
- User
/**
* @author lyt
* 用户实体类
*/
public class User {
private String userName;
private String say;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSay() {
return say;
}
public void setSay(String say) {
this.say = say;
}
}
- UserDao
/**
* @author lyt
* 用户数据访问接口
*/
public interface UserDao {
/**
* 增加用户
* @param user 用户对象
*/
public void addUser(User user);
}
- UserService
/**
* @author lyt
* 用户业务逻辑对象接口
*/
public interface UserService {
public void addNewUser(User user);
/*public void addNewUser2(com.home.moredatatype.User user);
public void updateUser(User user);
public String info();*/
}
- UserServiceImpl
/**
* @author lyt
* 用户业务逻辑实现类
*/
public class UserServiceImpl implements UserService {
/**
* 调用userDao的添加方法
*/
private UserDao userDao;
private String who;
private String content;
/**
* 创建构造器
*/
public UserServiceImpl() {
}
public UserServiceImpl(String who, String content) {
this.who = who;
this.content = content;
}
@Override
public void addNewUser(User user) {
userDao.addUser(user);
}
三、注入不同数据类型
四、异常抛出增强
1.异常抛出增强的特点:
- 在目标方法抛出异常时织入增强处理
- 可拔插的异常处理方案
- <aop:after-throwing>元素:定义异常抛出增强
- 将afterThrowing()方法定义为异常抛出增强
- 引用pointcut切入点
- 为e的参数 注入异常实例
<aop:after-throwing method="throwException" pointcut-ref="point" throwing="e"></aop:after-throwing>
/**
* 抛出异常增强
*/
public void throwException(JoinPoint jp,RuntimeException e){
logger.info(jp.getTarget()+"\t"+jp.getSignature().getName()+"方法,抛出了"+e.getMessage());
}
五、最终增强
1.最终增强的特点:
- 无论方法是否抛出异常,都会在目标方法最后织入增强处理,即:该增强都会得到执行
- 类似于异常处理机制中finally块的作用,一般用于释放资源
- 可以为各功能模块提供统一的,可拔插的处理方案 <aop:after>元素:定义最终增强
<aop:after method="afterLogger" pointcut-ref="point"></aop:after>-->
/**
* 最终增强
*/
public void afterLogger(JoinPoint jp){
logger.info(jp.getTarget()+"\t"+jp.getSignature()+"方法\t");
logger.info("最终增强");
}
六、环绕增强
1.环绕增强的特点:
- 目标方法前后都可织入增强处理
- 功能最强大的增强处理
- 可获取或修改目标方法的参数、返回值,可对它进行异常处理,甚至可以决定目标方法是否执行
- <aop:around>元素:定义环绕增强
<aop:around method="around" pointcut-ref="point"></aop:around>/** * 环绕增强 */ public void around(ProceedingJoinPoint pjp){ try { logger.info("执行前"); Object object = pjp.proceed(); logger.info("执行后"); } catch (Throwable throwable) { logger.info("异常中"); throwable.printStackTrace(); } finally { logger.info("结束"); } }
七、总结
1.常用增强处理类型
增强处理类型 | 特 点 |
Before | 前置增强处理,在目标方法前织入增强处理 |
AfterReturning | 后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理 |
AfterThrowing | 异常增强处理,在目标方法抛出异常后织入增强处理 |
After | 最终增强处理,不论方法是否抛出异常,都会在目标方法最后织入增强处理 |
Around | 环绕增强处理,在目标方法的前后都可以织入增强处理 |
2.Spring AOP配置
AOP配置元素 | 描 述 |
<aop:config> | AOP配置的顶层元素,大多数的<aop:*>元素必须包含在<aop:config>元素内 |
<aop:pointcut> | 定义切点 |
<aop:aspect> | 定义切面 |
<aop:after> | 定义最终增强(不管被通知的方法是否执行成功) |
<aop:after-returning> | 定义后置增强 |
<aop:after-throwing> | 定义异常抛出增强 |
<aop:around> | 定义环绕增强 |
<aop:before> | 定义前置增强 |
<aop:aspectj-autoproxy> | 启动@AspectJ注解驱动的切面 |