Spring Aop

Aop:

  面向切面编程的本质:面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。

1:主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。

2:主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,

      我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

AOP的一些实现:

用AOP给service加一些其他的功能

Dao层:

package cn.spring.mapper;

import cn.spring.entity.User;

public interface IUserMapper {

    public  Integer addUser(User userinfo);
}

Dao层实现类

package cn.spring.mapper.impl;

import cn.spring.entity.User;
import cn.spring.mapper.IUserMapper; public class IUserMapperImpl implements IUserMapper {
@Override
public Integer addUser(User userinfo) {
System.out.println("addUser");
return 0;
}
}

Service层

package cn.spring.service;

import cn.spring.entity.User;

public interface IUserService {

    public  Integer addUser(User userinfo);
}

Service层实现类:

package cn.spring.service.Impl;

import cn.spring.entity.User;
import cn.spring.mapper.IUserMapper;
import cn.spring.service.IUserService; public class IUserServiceImpl implements IUserService { private IUserMapper iUserMapper; public IUserMapper getiUserMapper() {
return iUserMapper;
} public void setiUserMapper(IUserMapper iUserMapper) {
this.iUserMapper = iUserMapper;
} @Override
public Integer addUser(User userinfo) {
Integer integer = iUserMapper.addUser(userinfo);
return integer;
}
}

第一种方法:实现MethodBeforeAdvice(前置增强)接口,AfterReturningAdvice(后置增强)接口

增强类:
package cn.spring.advice;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice; import java.lang.reflect.Method; public class AdivceMethod implements MethodBeforeAdvice, AfterReturningAdvice {
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("====================日志=================");
} @Override
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
System.out.println("====================事务=================");
}
}
applicationcontextbean.xml
  将Dao层与service层进行关联
  <bean id="iUserMapper" class="cn.spring.mapper.impl.IUserMapperImpl"></bean>
<bean id="iUserService" class="cn.spring.service.Impl.IUserServiceImpl">
<property name="iUserMapper" ref="iUserMapper"></property>
</bean>   找到要增强类
<bean id="Adivec" class="cn.spring.advice.AdivceMethod"></bean>
  配置aop
<aop:config >
<aop:pointcut id="pointcut" expression="execution(* *..service.*.*(..))"/>   找到在那增强,并指定增强哪里的内容
<aop:advisor advice-ref="Adivec" pointcut-ref="pointcut"></aop:advisor>    调用增强
  </aop:config>

  测试类:

package cn.spring.test;

import cn.spring.entity.User;
import cn.spring.print.print;
import cn.spring.service.IUserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class aoptest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontextbean.xml");
IUserService bean = (IUserService)context.getBean("iUserService");
bean.addUser(new User());
}
}

  结果:

第二种方法:不实现MethodBeforeAdvice(前置增强)接口,AfterReturningAdvice(后置增强)接口

增强类:
package cn.spring.advice;

public class Adivce{
public void before(){
System.out.println("基于配置的前置");
}
public void after(){
System.out.println("基于配置的后置");
}
}
applicationcontextbean.xml
  将Dao层与service层进行关联
  <bean id="iUserMapper" class="cn.spring.mapper.impl.IUserMapperImpl"></bean>
<bean id="iUserService" class="cn.spring.service.Impl.IUserServiceImpl">
<property name="iUserMapper" ref="iUserMapper"></property>
</bean>
 <bean id="befor" class="cn.spring.advice.Adivce"></bean>
<aop:config >
<aop:pointcut id="pointcut" expression="execution(* *..service.*.*(..))"/>
<aop:aspect ref="befor">
<aop:before method="before" pointcut-ref="pointcut"></aop:before>
<aop:after method="after" pointcut-ref="pointcut"></aop:after>
</aop:aspect>
</aop:config>

  结果:

Spring Ioc的三种注入方式:

实体类:

package cn.spring.entity;

public class User {
private Integer id;
private String username; public Integer getId() {return id; } public void setId(Integer id) { this.id = id;} public String getUsername() {return username;} public void setUsername(String username) { this.username = username;} public User(Integer id, String username) {
this.id = id;
this.username = username;
} public User() {
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
'}';
}
}
基于Setter注入:
applicationcontextbean.xml
<bean id="user" class="cn.spring.entity.User">
<property name="id" value="1"></property>
<property name="username" value="李一"></property>
</bean>-->
基于构造注入:
<bean id="user" class="cn.spring.entity.User">
<constructor-arg value="2" type="java.lang.Integer" index="0"></constructor-arg>
<constructor-arg value="王二" type="java.lang.String" index="1"></constructor-arg>
</bean>

该方法必须有对应的构造方法

p命名空间注入
  <bean id="user" class="cn.spring.entity.User" p:id="3" p:username="刘三"></bean>

基于setter注入,代表参数必须有set方法

												

Spring Aop和Spring Ioc(一)的更多相关文章

  1. 【Spring AOP】Spring AOP的使用方式【Q】

    Spring AOP的三种使用方式 经典AOP使用方式 改进XML配置方式 基于注解的方式 第1种方式可以作为理解spring配置AOP的基础,是最原始的配置方式,也体现了spring处理的过程. 使 ...

  2. 【Spring AOP】Spring AOP之如何通过注解的方式实现各种通知类型的AOP操作进阶篇(3)

    一.切入点表达式的各种类型 切入点表达式的作用:限制连接点的匹配(满足时对应的aspect方法会被执行) 1)execution:用于匹配方法执行连接点.Spring AOP用户可能最经常使用exec ...

  3. 【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)

    一.什么是AOP AOP(Aspect-oriented Programming)即面向切面编程,是对OOP( Object-oriented Programming)即面向对象编程的一种补充,AOP ...

  4. Spring Aop和Spring Ioc(二)

    Spring IOC: DI注入集合类型: 实体类: package cn.spring.entity; import java.util.*; public class Dientity { pri ...

  5. Spring AOP (Spring 3.x 企业应用开发实战读书笔记第六章)

    从面相对象编程到面相切面编程,是一种代码组织方式的进化. 每一代的代码组织方式,其实是为了解决当时面对的问题.比如写编译器和写操作系统的时候的年代当然要pop,比如写界面的时候当然要oop,因为界面这 ...

  6. Java Spring AOP用法

    Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...

  7. Spring AOP 简介

    Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...

  8. spring AOP的学习

    1.Spring常用的概念 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. Pointcut(切入点): ...

  9. spring AOP 之一:spring AOP功能介绍

    一.AOP简介 AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点.Aop的典型应用即spring的事务机制,日志记录.利用AOP可以对业务逻辑的 ...

随机推荐

  1. 【WPF学习】第四十二章 透明

    WPF支持真正的透明效果.这意味着,如果在一个性质或元素上层叠另外几个形状或元素,并让所有这些形状和元素具有不同的透明度,就会看到所期望的效果.通过该特性能够创建透过上面的元素可以看到的的图像背景,这 ...

  2. BZOJ 4556(后缀数组+主席树求前驱后继+二分||后缀数组+二分+可持久化线段树)

    换markdown写了.. 题意: 给你一个1e5的字符串,1e5组询问,求\([l_1,r_1]\)的所有子串与\([l_2,r_2]\)的lcp 思路: 首先可以发现答案是具有单调性的,我们考虑二 ...

  3. Go语言实现:【剑指offer】删除链表中重复的结点

    该题目来源于牛客网<剑指offer>专题. 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字. 示例 1: 输入: 1->2->3->3- ...

  4. Go语言实现:【剑指offer】复杂链表的复制

    该题目来源于牛客网<剑指offer>专题. 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.( ...

  5. apache 访问状态 分析

    状态查看: 1.查看apache 各状态连接数 [root]#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ...

  6. 基于 H5 Canvas 实现楼宇新风系统

    前言 现如今,新型冠状病毒疫情牵动着每一个人的神经,每天起床后的第一件事就是打开疫情地图,看看最新的疫情数据. (http://www.hightopo.com/demo/coronavirus/) ...

  7. Nginx-2.初学者使用

    原文 Nginx有一个master进程和几个worker进程.master进程用来读取和评估配置文件,以及维护worker进程.worker进程用来处理实际的请求.Nginx使用事件模型和基于操作系统 ...

  8. ORB-SLAM2 论文&代码学习 —— 单目初始化

    转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12358458.html 本文要点: ORB-SLAM2 单目初始化 ...

  9. backgroud图片充满元素的方法

    background-image: url("img/headimg.png"); height: 219px; background-size: 100% 100%; backg ...

  10. StarUML之五、StarUMl中Formatting Diagram-格式化图

    这章比较简单,主要是对视图元素的样式调整 主要是在视图元素右下角设置,可以修改视图元素的相关样式 字体样式 颜色 链接线样式 对齐样式 Stereotype Display-视图元素的样式属性 菜单F ...