Spring Aop和Spring Ioc(一)
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(一)的更多相关文章
- 【Spring AOP】Spring AOP的使用方式【Q】
Spring AOP的三种使用方式 经典AOP使用方式 改进XML配置方式 基于注解的方式 第1种方式可以作为理解spring配置AOP的基础,是最原始的配置方式,也体现了spring处理的过程. 使 ...
- 【Spring AOP】Spring AOP之如何通过注解的方式实现各种通知类型的AOP操作进阶篇(3)
一.切入点表达式的各种类型 切入点表达式的作用:限制连接点的匹配(满足时对应的aspect方法会被执行) 1)execution:用于匹配方法执行连接点.Spring AOP用户可能最经常使用exec ...
- 【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)
一.什么是AOP AOP(Aspect-oriented Programming)即面向切面编程,是对OOP( Object-oriented Programming)即面向对象编程的一种补充,AOP ...
- Spring Aop和Spring Ioc(二)
Spring IOC: DI注入集合类型: 实体类: package cn.spring.entity; import java.util.*; public class Dientity { pri ...
- Spring AOP (Spring 3.x 企业应用开发实战读书笔记第六章)
从面相对象编程到面相切面编程,是一种代码组织方式的进化. 每一代的代码组织方式,其实是为了解决当时面对的问题.比如写编译器和写操作系统的时候的年代当然要pop,比如写界面的时候当然要oop,因为界面这 ...
- Java Spring AOP用法
Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...
- Spring AOP 简介
Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...
- spring AOP的学习
1.Spring常用的概念 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. Pointcut(切入点): ...
- spring AOP 之一:spring AOP功能介绍
一.AOP简介 AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点.Aop的典型应用即spring的事务机制,日志记录.利用AOP可以对业务逻辑的 ...
随机推荐
- HDU_1506_单调栈
http://acm.hdu.edu.cn/showproblem.php?pid=1506 从栈底到栈顶从小到大排序,碰到比栈定小的元素,出栈处理,直到栈顶比元素小或者栈为空. 数组最后多加了个-1 ...
- 《N诺机试指南》(五)进制转化
进制转化类题目类型: 代码详解及注释解答: //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...
- learn about sqlserver partitition and partition table --- add or remove table partitions
demo/* add partitions */ alter database xxx add filegroup FG_=fff_201708;alter database xxx add file ...
- 基于 H5和 3D WebVR 的可视化虚拟现实培训系统
前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...
- NR / 5G - The Round Robin algorithm
- vi/vim编辑器操作梳理
1. vi/vim编辑器详细使用讲解 1.1 vi/vim编辑器的3种模式 1.2 vi/vim编辑器操作说明 参数/命令/模式 说明 ###普通模式 :set nu 显示行号 :set non ...
- ubuntu 14.04 下安装 selenium 2.0
文章参考出处:http://blog.sina.com.cn/s/blog_5042ea610102we4y.html 1.安装 python-pip sudo apt-get install pyt ...
- 仅需60秒,使用k3s创建一个多节点K8S集群!
作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...
- codewars--js--Hamming Numbers
问题描述: A Hamming number is a positive integer of the form 2i3j5k, for some non-negative integers i, j ...
- Verilog HDL学习_1:分频器/PWM的实现
(一)参考学习资料 (二)实际操作 1. 相关变量计算: First Initial Second Initial Upper case H X ASCII (Dec) 72 88 Lengths ...