Aop实现,麻烦讲解一下Java中Spring中IOC和AOP

1,麻烦讲解一下Java中Spring中IOC和AOPIoC:说直白点,就是通过配置文件(XML或.properties)指定需要实例化的JAVA类(类名的完整字符串) , 包括该JAVA类的一组初始化值 , 然后我们在代码中加载该配置文件 , 然后通过 .getBean() 函数就可以得到一个该JAVA类的对象,并且该对象已经根据配置文件中指定的属性值进行了初始化 。AOP:这个比IoC更简单 , 直白点说就是实现调用某个方法之前或/和之后,自动执行一系列自定义的语句
2,什么是AOPAOP的作用是什么AOP :面向切面编程,它主要关注的是程序的执行过程 。具体解析:在java方法调用时,AOP机制能自动进行方法拦截,允许在方法调用之前,调用后,以及执行异常时添加特点的代码来完成需要的功能 。特点:1,消除编码模块之间的耦合 。2,可以在任意阶段,向已有功能模块中填加新功能,且不侵入原有功能 低侵入式设计 3 ,  各步骤之间的良好隔离性 , 源代码的无关性oop:纵向的业务 。Aop:oop的一个横向服务,是对oop进一步补充,提高安全、事务、日志等的集中式处理 。相关的装备 before、around、afteraop是面向切面的编程 。它可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术 。如果您学习java的话,会在spring中经常用到,那是你更能领悟它!
3,为什么spring中AOP 用的很少spring AOP不是用反射实现的,而bean的创建一般是这样做的 。spring里主要通过Java动态代理接口、cglib生成子类、AspectJ这三种方式来实现AOP 。通过AOP进行声明式事务管理应该是大家用的最多的吧 。像权限校验和日志记录虽然也具备一定的横切性需求 , 但好像很少拿spring来做 , 权限控制框架倒是可以考虑与spring进行集成,细粒度的日志记录则根本无法真正利用AOP来做,原因在于业务方法记录日志的位置是不统一的,从而无法确定切入点 。但spring利用AOP还是干了不少事情的,随便翻看源码你都可以发现它们的影子 。举个例子,spring里有一个javax.sql.DataSource的代理类TransactionAwareDataSourceProxy,它利用java的动态代理在运行时替换了原生DataSource的getConnection等诸多方法,最重要的是它使你的遗留系统具备了与spring集成并使用spring事务管理的能力,而这一切你只需要一个简单的配置 , 你并不知道spring在后台为你做了这些事情 。AOP是一种很有用的编程理念,语言和工具不应成为我们程序员思想的束缚 , 即使项目不用spring AOP你也可以在适当的契机把spring里好的想法拿来用,甚至你觉得不好还可以改造它,这样我们才能真正成为工具的主人而不是奴仆 。【Aop实现,麻烦讲解一下Java中Spring中IOC和AOP】
4,Spring是怎么通过AOP实现事物管理的它支持哪几种事务隔离类型Spring支持JDBC规范定义的四种隔离级别,分别是int TRANSACTION_NONE= 0;int TRANSACTION_READ_UNCOMMITTED = 1;int TRANSACTION_READ_COMMITTED= 2;int TRANSACTION_SERIALIZABLE= 8;Spring可以有效设定这些事务隔离级别,并可以设定事务传播时的行为 。前提是:数据库要支持这几种隔离级别 , 否则出错rollback时出现数据不一致您好,看到您的问题将要被新提的问题从问题列表中挤出,问题无人回答过期后会被扣分并且悬赏分也将被没收!所以我给你提几条建议:<br>一,您可以选择在正确的分类下去提问或者到与您问题相关专业网站论坛里去看看,这样知道你问题答案的人才会多一些,回答的人也会多些 。<br>二 , 您可以多认识一些知识丰富的网友,和曾经为你解答过问题的网友经常保持联系,遇到问题时可以直接向这些好友询问,他们会更加真诚热心为你寻找答案的 。<br><br>要想管理好一个企业:<br>要有一个公心 , 成天说务实,说实话、办实事、报实数,杜绝山头主义 , nnd全是放屁,杜绝山头主义,海信科龙现在简直就像割韭菜,总们一换底下的人就要被换,难道这就是杜绝山头主义吗?保护员工允许投诉,投诉了又怎么样哪?只有一个结果就是告诉被投诉的人,谁投诉了你,没有见为此展开过调查 , 朝中有人好办事?。≈劣谕端呷说南鲁? ,哈哈哈,可以想象! <br>这几天看了看周董在海信时代上写的干部要如何用好权利,上面写的现象就是目前企业出现的现象,说明他们很明白这个企业目前存在的问题!可是采取的措施哪?也就是喊喊口号罢了! <br>海信真的是个培养人才的地方 , 但是培养出来的人才最后都去了哪里?在为谁工作?我就不明白了,为什么在这个企业被认为是不优秀的人,为什么到了别的企业都是骨干?而真正留下来的人是精英吗? <br>哎!说来说去在海信要是讨论如何才能管理好一个企业的问题的话,只能用一个形容词:用割韭菜的方法管理好一个企业就是海信的管理之道!看看海信科龙就之道了! <br>每次石总在会上痛批海信人如何不好,科龙人如何好的时候,你就没有想想你在海信做领导多年,难道这帮对我不是你带的吗? <br>当海信大批的换产品总的时候你们就没有想想你们没有责任吗?你们的市场人员下市场多吗?了解市场吗?闭门造车能够对应这个市场吗?要不你们这些总们亲自找个分公司干干,叫我们看看你们的真正本事!<br><br>投票咯~~~<br><br>热烈欢迎大家快来投票选出搜搜问问最垃圾团队哦~~~~<br>投票地址: <a href="http://wenwen.soso.com/z/urlalertpage.e?sp=shttp%3a%2f%2fsobar.soso.com%2ftie%2f72370657.html" target="_blank">http://sobar.soso.com/tie/72370657.html</a>5,spring 的AOP实现机制有哪些SPRING是通过动态代理来实现AOP的,SPRING内部提供了2种实现机制1.如果是有接口声明的类进行AOP,spring调用的是java.lang.reflection.Proxy类来做处理org.springframework.aop.framework.JdkDynamicAopProxypublic Object getProxy(ClassLoader classLoader)if (logger.isDebugEnabled())Class targetClass = this.advised.getTargetSource().getTargetClass();logger.debug(“Creating JDK dynamic proxy” +(targetClass != null ? ” for [" + targetClass.getName() + "]” : “”));}Class[] proxiedInterfaces = AopProxyUtils.completeProxiedInterfaces(this.advised);return Proxy.newProxyInstance(classLoader, proxiedInterfaces, this);}org.springframework.aop.framework.ReflectiveMethodInvocationpublic Object proceed() throws Throwable 1.jdk proxy方式先来一个接口IHelloWorld.javapackage kris.aop.test; public interface IHelloWorld Test.javapackage kris.aop.test; import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy; public class Test { public static void main(String args []){Class clazz = new HelloWorld().getClass();ClassLoader cl = clazz.getClassLoader();Class classes [] = clazz.getInterfaces();InvocationHandler ih=new DefaultInvocationHandler();//用InvocationHandler给HelloWorld进行AOP包装IHelloWorld ihw=(IHelloWorld) Proxy.newProxyInstance(cl,classes,ih);ihw.print(“test”);ihw.write(“test”);}} 2.用CGLIB包实现,首先不要忘了引入那个包package kris.aop.cglib.test; public class HelloWorld { public void print(String name){System.out.println(“HelloWorld “+name);} public void write(String sth) {System.out.println(“write “+sth);}public void print(){System.out.println(“HelloWorld”);}} 代理类(没用内部类,看起来清楚点)package kris.aop.cglib.test; import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy; public class MethodInterceptorImpl implements MethodInterceptor { public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable { System.out.println(method); proxy.invokeSuper(obj, args); return null;}} 测试类 package kris.aop.cglib.test; import net.sf.cglib.proxy.Enhancer; public class Test { public static void main(String[] args) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(HelloWorld.class);//设置回调方法实现类enhancer.setCallback(new MethodInterceptorImpl());//实例化已经添加回调实现的HELLOWORLD实例HelloWorld my = (HelloWorld) enhancer.create(); my.print();} }

    推荐阅读