项目中使用到了Spring,写了一个简单的例子,跟大家分享一下,由于自己写东西,所以在技术选择上充分自由,虽然对于Spring的利弊众说纷纭,我也不能评判,反正我是尝试用了,记得在上学时候老师讲Spring的时候给出的几个关键点是,控制反转(IOC),和依赖注入。这些概念真的是让人望而却步。所以上学的时候关于这部分内容就基本忽略了。我的浅见是Spring有自己的反射机制,能够将开发者配置到配置文件中的类实例化。

  我写的内容就是通过注入的方式实现一个Hello的功能,然后在通过aop的方式来实现一些上下文的铺垫,使用的是Spring3.0,下面看一下代码,首先我定义了一个ISayHello类,内容如下:

package spring_test;

public interface ISayHello {
public void sayHello();
}

  在定义两个类分别继承ISayHello接口,实现sayHello方法,AmericaSay,ChineseSay内容分别如下:  

package spring_test;

public class AmericaSay implements ISayHello {

    @Override
public void sayHello() {
System.out.println("Hello");
} }

  

package spring_test;

public class ChineseSay implements ISayHello {

    @Override
public void sayHello() {
System.out.println("你好");
} }

  然后在定一个映射类,用来获取在配置文件中获取到的对象:  

package spring_test;

public class PeopleSayHello {
public ISayHello iSayHello; public ISayHello getiSayHello() {
return iSayHello;
} public void setiSayHello(ISayHello iSayHello) {
this.iSayHello = iSayHello;
} public void SayHello() {
iSayHello.sayHello();
}
}

  OK,准备工作做完了,下面也就是最重要的部分,如何在配置文件中配置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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="ChineseSayBean " class="spring_test.ChineseSay"></bean>
<bean id="SayHelloBean" class="spring_test.PeopleSayHello">
<property name="iSayHello" ref="ChineseSayBean"></property>
</bean>
</beans>

  现在准备工作都完成了,下面该是如何让这些准备工作实现价值的时候了:  

package spring_test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Spring_001_main {
public static void main(String[] arg) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"sayHello.xml");
PeopleSayHello s = (PeopleSayHello) ctx.getBean("SayHelloBean");
s.SayHello();
}
}

  运行结果:输出您好。感觉有些突兀,我们在给他添加一些铺垫,在输出你好之前,和你好之后在加一些内容,我们通过aop来实现,首先需要将配置文件中加上aop的约束,以及切片的定义。关于切片大家可以了解一下:http://shouce.jb51.net/spring/aop.html 

<?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-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean id="HostBean" class="spring_test.aop.Host"></bean>
<bean id="ChineseSayBean " class="spring_test.ChineseSay"></bean>
<bean id="SayHelloBean" class="spring_test.PeopleSayHello">
<property name="iSayHello" ref="ChineseSayBean"></property>
</bean> <aop:config>
<aop:aspect id="HostAspect" ref="HostBean">
<aop:pointcut id="sayhello"
expression="execution(* spring_test.ChineseSay.*(..))" />
<aop:before method="doBefore" pointcut-ref="sayhello" />
<aop:after method="doAfter" pointcut-ref="sayhello" />
</aop:aspect>
</aop:config>
</beans>

   上面这段话的简单解释就是定义一个切面HostAspect,该切面引用HostBean,就是要调用HostBean指向类中的方法,在切面中有个切入点sayhello,在切入点sayhello有前置通知和后置通知,分别调用doBefore和doAfter方法。

,,下面就是在不敢变源代码的接触上加上主持人的角色和任务,在同学上台之前,由主持人引荐,在发言人下台之后,主持人送一下,下面就是添加的主持人的角色:  

package spring_test.aop;

import org.aspectj.lang.JoinPoint;

public class Host {
public void doBefore(JoinPoint jp) {
System.out.println("欢迎下一位同学发言,鼓掌:papapapapapa");
} public void doAfter(JoinPoint jp) {
System.out.println("谢谢同学的发言,再次把掌声送给他,papappapapa");
}
}

  OK,我们要实现的功能已经完成了,你信不,很方便。看一下执行结果:  

欢迎下一位同学发言,鼓掌:papapapapapa
你好,我是雷锋,请多多照顾
谢谢同学的发言,再次把掌声送给他,papappapapa

  很简单的一个功能,可以下载我的demo,实现这个功能以后大家就可以想想关于过滤器啊,拦截器这一类功能也可以通过这种方法来完成。

  

  下载地址:

  http://files.cnblogs.com/fantiantian/javatest.rar

spring相关的jar文件可以从一下地址下载:

http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-3.0.2.RELEASE.zip

http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-3.0.2.RELEASE-dependencies.zip

Spring的AOP浅尝的更多相关文章

  1. 浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含自定义扫描组件.自定义导入组件.手动注册组件.自动注入方法和参数.使用Spring容器底层组件等 配置 @Confi ...

  2. 浅尝Spring注解开发_Bean生命周期及执行过程

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...

  3. 浅尝Spring注解开发_AOP原理及完整过程分析(源码)

    浅尝Spring注解开发_AOP原理及完整过程分析(源码) 浅尝Spring注解开发,基于Spring 4.3.12 分析AOP执行过程及源码,包含AOP注解使用.AOP原理.分析Annotation ...

  4. 浅尝Spring注解开发_Servlet3.0与SpringMVC

    浅尝Spring注解开发_Servlet 3.0 与 SpringMVC 浅尝Spring注解开发,基于Spring 4.3.12 Servlet3.0新增了注解支持.异步处理,可以省去web.xml ...

  5. 浅谈Spring的AOP实现-动态代理

    说起Spring的AOP(Aspect-Oriented Programming)面向切面编程大家都很熟悉(Spring不是这次博文的重点),但是我先提出几个问题,看看同学们是否了解,如果了解的话可以 ...

  6. 浅谈Spring的AOP实现-代理机制

    说起Spring的AOP(Aspect-Oriented Programming)面向切面编程大家都很熟悉(Spring不是这次博文的重点),但是我先提出几个问题,看看同学们是否了解,如果了解的话可以 ...

  7. 浅尝装饰器和AOP

    [写在前面] 参考文章:https://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html[从简单的例子入手进行讲解,由浅入深,很到位] 装饰器部 ...

  8. Spring:AOP

    摘要 本文内容为我在网上搜集Spring AOP资料的汇总.摘抄. AOP是一种编程思想,其对不同对象进行了横向的抽象,将不同对象的.和主流程无关的公共逻辑抽象出来以方便维护.AOP的实现基础为AOP ...

  9. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

随机推荐

  1. CSU-1989 赶路的小X

    题目链接 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=1989 题目 Description A国一共有N座城市,由M条双向公路连 ...

  2. 1079 Total Sales of Supply Chain (25 分)(树的遍历)

    给出一颗销售供应的树,树根唯一.在树根处货物的价格为p,然后从根节点开始没往结点走一层,该层的货物价格将会在父节点的价格上增加r%.给出每个叶节点的货物量求出他们的价格之和 #include<b ...

  3. Unresolved defparam reference to 'read_aclr_synch' in dcfifo_component.read_aclr_synch

    问题: 今天用 questasim 仿真出现下面这个问题. Unresolved defparam reference to 'read_aclr_synch' in dcfifo_component ...

  4. Linux 查看当前日期和时间

    一.查看和修改Linux的时区 1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区 方法 A 命令 : "tzselect" ...

  5. shell之route命令相关

    使用下面的 route 命令可以查看 Linux 内核路由表. # route Destination Gateway Genmask Flags Metric Ref Use Iface 192.1 ...

  6. [oldboy-django][2深入django]点击刷新验证码

    # 点击更新验证码,只要重新在发送一个请求即可 <img src="/check_code/" onclick="updateCode(this);" w ...

  7. java与C#对比文章阅读

    文章:JAVA与C#的区别 讲了C#与java一些基本异同.    易语言官网有个表,比较了易语言.Java.C#的区别,比较全面可以借鉴.    

  8. 启动Tomcat时的常见问题及解决办法

    问题一:环境变量 1.检查jdk 验证jdk的配置,在运行-cmd中输入 java -version 即表示安装成功. 如果jdk没有问题,还需要配置两个环境变量.找到jdk和jre的路径,配置JAV ...

  9. Java API操作ZooKeeper

    创建会话 package org.zln.zk; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watch ...

  10. linux正则表达式(一)

    正则表达式是一种字符串模式匹配,使用灵活.功能强大,使用简单的方式对字符串进行控制. 1.使用grep进行字符串匹配 测试文本 1.txt helloworld haa !@#$%^&*( A ...