【皇甫】☀初识AOP
新知识,新起点,下面介绍一下aop所要准备架包和各个层
特点:
创建好的各个层:
所需架包:
具体步骤:
No.1 搭建分层架构 entity
1 public class User implements Serializable{
2 private Integer id; // 用户ID
3 private String username; // 用户名
4 private String password; // 密码
5 private String email; // 电子邮件
6 }
entity 具体代码
No.2 创建数据访问层接口和实现类
public interface IDao {
public void save(User user);
}
访问层接口
public class UserDao implements IDao {
public void save(User user) {
System.out.println("save success!");
}
}
实体类
No.3 创建创建业务逻辑层接口和实现类
public interface IUserBiz {
public void save(User user);
}
业务逻辑层
public class UserBiz implements IUserBiz{
private IDao dao;
public void save(User user) {
dao.save(user);
}
//dao 属性的setter访问器,会被Spring调用,实现设值注入
public void setDao(IDao dao) {
this.dao = dao;
}
}
实体类
No.4 创建前置和后置增强处理类
public class LoggerBefore implements MethodBeforeAdvice {
private static final Logger log = Logger.getLogger(LoggerBefore.class);
public void before(Method arg0, Object[] arguments, Object target)
throws Throwable {
log.info("前置内容AAA");
}
}
前置增强
public class LoggerAfter implements AfterReturningAdvice{
public void afterReturning(Object returnValue, Method method, Object[] arguments,
Object target) throws Throwable {
System.out.println("后置增强代码");
}
}
后置增强
No.5 在Spring配置文件中完成业务对象和DAO的定义和装配,并定义前置增强和后置增强组件
<bean id="dao" class="cn.happy.dao.impl.UserDao"/>
<bean id="biz" class="cn.happy.biz.impl.UserBiz">
<property name="dao" ref="dao"></property>
</bean>
<!-- 定义前置增强组件 -->
<bean id="loggerBefore" class="cn.happy.aop.LoggerBefore"/>
<!-- 定义后置增强组件 -->
<bean id="loggerAfter" class="cn.happy.aop.LoggerAfter"/>
具体相关代码
No.6 织入处理
定义切入点,常见的方法有以下几点:
public * addNewUser(entity.User)
public void *(entity.User)
public void addNewUser(..)
* com.bdqn.service.*.*(..)
* com.bdqn.service..*.*(..) 等
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
"> <bean id="dao" class="cn.happy.dao.impl.UserDao"/>
<bean id="biz" class="cn.happy.biz.impl.UserBiz">
<property name="dao" ref="dao"></property>
</bean>
<!-- 定义前置增强组件 -->
<bean id="loggerBefore" class="cn.happy.aop.LoggerBefore"/>
<!-- 定义后置增强组件 -->
<bean id="loggerAfter" class="cn.happy.aop.LoggerAfter"/>
<!-- 针对AOP的配置 -->
<aop:config>
<aop:pointcut id="pointcut" expression="execution(public void save2(cn.happy.entity.User))"/>
<!-- 将增强处理和切入点结合在一起,在切入点处插入增强处理,完成"织入"-->
<aop:advisor pointcut-ref="pointcut" advice-ref="loggerBefore"/>
<aop:advisor pointcut-ref="pointcut" advice-ref="loggerAfter"/>
</aop:config> </beans>
完整配置
No.7 测试
用于到测试了,阿西巴
public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserBiz biz=(IUserBiz)ctx.getBean("biz");
User user=new User();
biz.save(user);
System.out.println("success!");
}
测试
-
**********************************************************************************************************
AOP(面向对象编程)在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP在其他领域也有其他含义。
附*
**********************************************************************************************************************
希望以上内容可以帮到大家
【皇甫】☀初识AOP的更多相关文章
- 【皇甫】☀IOC和AOP的拓展实例
<!--构造器注入 --> <bean id="user1" class="cn.happy.entity.User"> <con ...
- 初识Aop和扩展Aop
一.什么叫做AOp 解析:Aop(Aspect Oriented Programming)是面向切面编程,软件编程的一种思想. OOp(Object Oriented Programming)是面向对 ...
- 初识AOP与动态代理
AOP AOP是指在jvm运行时, 动态将代码切入到指定位置. OOP是一个维度上写代码, AOP是把他切开来, 变成立体的. 这样的好处是: 业务逻辑跟辅助逻辑分离, 例如日志打印, 性能监控, 安 ...
- 【皇甫】☀Spring开题中...
spring (由Rod Johnson创建的一个开源框架)Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spr ...
- 【皇甫】☀Struts_第一节课
本章讲解内容: DTD是Docunent Type Defintion的缩写,即文档类型定义.DTD用来描述XML文档结构. DOM4J是一个非常优秀的javaXML API,具有性能优异,功能强大和 ...
- 【皇甫】☀Hibernate入门
说说我们最近的一些事 二期已经过去了,下面迎接的就是二年,据原老师讲解,我们10月份就开始陆续找工作了,虽然他说我们找工作不是问题,可每个人都有自知之明,我也知道我所处的位置,所以我清楚我要怎么做,我 ...
- 【皇甫】☀ TreeSet
-Set: 元素是无序(存入和取出的顺序不一致),元素不可以重复 |-- HashSet: 底层数据结构是哈希表 HashSet是如何保证元素的唯一性的呢? 是通过元素的两个方法,hashCode和e ...
- 【皇甫】☀ 图_substring
substring是啥?
- 【皇甫】☀那些事儿......STEP
写项目之前呢,先来缕缕思路,既然要写学生管理系统,那肯定上不了从数据库中读取信息,然而想要从数据库中拿到你想要的东西,就要先登录,得到他的权限才行,所以我们第一步就要先搞出一个登录页面并且能连接到数据 ...
随机推荐
- HBase如何选取split point
hbase region split操作的一些细节,具体split步骤很多文档都有说明,本文主要关注regionserver如何选取split point 首先推荐web ui查看hbase regi ...
- VBA找不到progress bar的处理办法。
Search your pc for MSCOMCTL.Ocx. If you find it then register it by clicking on Windows Start Button ...
- Django分析之如何自定义manage命令
我们都用过Django的manage.py的命令,而manage.py是在我们创建Django项目的时候就自动生成在根目录下的一个命令行工具,它可以执行一些简单的命令,其功能是将Django proj ...
- Java知识结构
- marquee-:模拟弹幕
marquee:基本已被弃用!!1 可以模拟弹幕效果 1.方向:direction up right left down ...
- csipsimple 出现单通情况
今天在测试voip电话时,突然打不通了和windows端也不通,boss发怒了. 经过排查,发现设置G729编码 //设置G729编码 prefs.setCodecPriority("g72 ...
- 移动手机端H5无缝间歇平滑向上滚动js代码
在没结合css3的transform实现平滑过渡前,我都是用的jquery的animate方法,此方法在PC端基本看不出来有稍微卡顿的现象,但是在性能不高的手机上使用该方法,就会有明显的卡顿现象,不够 ...
- Unity3D 自定义事件(事件侦听与事件触发)
先来看下效果图,图中点击 Cube(EventDispatcher),Sphere(EventListener)以及 Capsule(EventListener)会做出相应的变化,例子中的对象相互之间 ...
- 【转】logback logback.xml常用配置详解(二)<appender>
原创文章,转载请指明出处:http://aub.iteye.com/blog/1101260, 尊重他人即尊重自己 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透 ...
- GIT 操作
1. 查看某个文件某次提交修改的内容 git show commitid a.txt 2. git rm 和 git rm --cached 当我们需要删除暂存区或分支上的文件, 同时工作区也不 ...