Spring依赖注入方式和增强类型使用

目录

一、构造注入 

二、使用p命名空间注入属性值

1.p 命名空间的特点:

 三、注入不同数据类型

 四、异常抛出增强

1.异常抛出增强的特点:

五、最终增强

1.最终增强的特点:

 六、环绕增强

1.环绕增强的特点:

 七、总结

 1.常用增强处理类型

2.Spring AOP配置



提示:以下是本篇文章正文内容,下面案例可供参考

一、构造注入 

  1. 创建带参构造方法
/**
 * @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>&ndash;&gt;-->
  • 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.异常抛出增强的特点:

  1. 在目标方法抛出异常时织入增强处理
  2. 可拔插的异常处理方案
  3. <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注解驱动的切面

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值