Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式
来源:互联网 发布:新开淘宝怎样运营快速 编辑:程序博客网 时间:2024/06/05 20:22
Spring框架的作用:为了简化java开发
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的
一.IOC(控制反转)
1 构造器注入
(xml配置)
2方法注入
(注解方式)
(xml配置)
二,AOP(面向切面)
注解方式
xml配置
只是使用,那简单,原理后面补上
代码架构
spring-test.xml
<?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:context="http://www.springframework.org/schema/context"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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "> <!-- 注解支持,为了让我们可以使用注解创建bean --><context:annotation-config /><!--设置要扫描的包的位置 --> <context:component-scan base-package="com.eyugame.test" /><!-- 支持aop注解 --><aop:aspectj-autoproxy /><aop:config ><!-- 配置aop触发调用的类是myService也就是下面对应的MyServiceImpl --><aop:aspect id="spect" ref="myAop"><!-- 配置调用com.eyugame.test.MyBean的toDo()方法的时候触发aop --><aop:pointcut id="target"expression="execution(* com.eyugame.test.MyBean.toDo(..))" /><!-- 执行前调用,调用方法为doBefore --><aop:before pointcut-ref="target" method="doBefore()" /><!-- 执行后调用,调用方法为doAfter --><aop:after pointcut-ref="target" method="doAfter()" /><!-- 返回时调用,调用方法doReturn --><aop:after-returning pointcut-ref="target"method="doReturn()" /><!-- 抛出异常时候调用,调用方法doReturn --><aop:after-throwing pointcut-ref="target" method="doThrowing()"throwing="ex" /><!-- 注意 aop:aroup在新版本spring好像失效,坑我 --><!-- <aop:around pointcut-ref="businessService" method="doAround"/> --></aop:aspect></aop:config><bean id="myAop" class="com.eyugame.test.MyAop"></bean><bean id="depedecyBean" class="com.eyugame.test.DependencyBean"></bean><!-- 依赖注入1构造器注入 --><bean id="myBean" class="com.eyugame.test.MyBean"><constructor-arg ref="depedecyBean"></constructor-arg></bean><!-- 依赖注入2设值注入 --><bean id="myBean2" class="com.eyugame.test.MyBean2"><!-- 名称要跟类里面要注入的类的名字一致 --><property name="iDependency" ref="depedecyBean"></property></bean><!-- 注解Aop --><bean id="myAop2" class="com.eyugame.test.MyAop2"></bean></beans>依赖注入时的接口
package com.eyugame.test;public interface IDependency { void show();}依赖注入的具体类
package com.eyugame.test;public class DependencyBean implements IDependency {public void show() {System.out.println("my class name:" + this.getClass());}}AOP类
package com.eyugame.test;public class MyAop {public MyAop() {};public void doBefore() {System.out.println("执行前调用");}public void doAfter() {System.out.println("执行后调用");}public void doReturn() {System.out.println("结束时候调用");}public void doThrowing() {System.out.println("有异常时候调用"); }}
package com.eyugame.test;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;/*注解AOP*/@Aspectpublic class MyAop2 {public MyAop2() {};@Pointcut(value= "execution(* com.eyugame.test.MyBean2.toDo(..))")private void init() {}@Before("execution(* com.eyugame.test.MyBean2.toDo(..))")public void doBefore() {System.out.println("执行前调用");}@After("execution(* com.eyugame.test.MyBean2.toDo(..))")public void doAfter() {System.out.println("执行后调用");}@AfterReturning("execution(* com.eyugame.test.MyBean2.toDo(..))")public void doReturn() {System.out.println("结束时候调用");}@AfterThrowing("execution(* com.eyugame.test.MyBean2.toDo(..))")public void doThrowing() {System.out.println("有异常时候调用");}}
构造器注入
package com.eyugame.test;public class MyBean { private IDependency iDependency; public MyBean(){ } /*依赖注入1:构造器注入*/ public MyBean(IDependency iDependency){ this.iDependency=iDependency; } public void toDo() { this.iDependency.show(); } }
package com.eyugame.test;/*方法注入*/public class MyBean2 { private IDependency iDependency; public MyBean2() { } public void toDo() { this.iDependency.show(); } /* 依赖注入2:之设值注入 */ public void setiDependency(IDependency iDependency) { this.iDependency = iDependency; }}注解创建的Bean
package com.eyugame.test;import org.springframework.stereotype.Component;@Component("myBean3")public class MyBean3 {public void show() {System.out.println("my name is MyBean3");}}
测试
import com.eyugame.test.MyBean;import com.eyugame.test.MyBean2;import com.eyugame.test.MyBean3;public class TestSpring {@SuppressWarnings("resource")public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("config/spring/spring-test.xml");System.out.println("使用构造器注入和配置aop-------------");/*依赖注入一:构造器注入|aop测试*/MyBean myBean = context.getBean("myBean",MyBean.class);myBean.toDo();System.out.println("使用方法注入和注解aop-----------");/*依赖注入二:方法注入*/MyBean2 myBean2 = context.getBean("myBean2",MyBean2.class);myBean2.toDo();/*使用注解创建bean*/System.out.println("使用注解创建bean-----------");MyBean3 myBean3=context.getBean("myBean3",MyBean3.class);myBean3.show();}}
依赖的包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>Test</groupId><artifactId>test2</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>test2</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!--各个jar的版本 --><spring.version>3.2.3.RELEASE</spring.version><junit.version>4.11</junit.version><jsonlib.version>2.4</jsonlib.version><shiro.version>1.2.0</shiro.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!-- Spring jars --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.5</version></dependency><!-- <dependency> <groupId> org.aspectj</groupId> <artifactId> aspectjweaver</artifactId> <version> 1.6.11</version> </dependency> --></dependencies></project>
控制台输出
2 1
- Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式
- Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置
- Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置
- spring的IOC(控制反转)与AOP(面向切面编程)
- idea 实现Spring讲解(Ioc-控制反转)/Aop(面向切面的编程)
- 切面(aop)控制反转和依赖注入(IOC,DI)和spring的事务隔离和传播行为
- JavaEE框架——Spring入门基础(控制反转Ioc和切面技术Aop)
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- SPRING--Spring中IOC(反转控制) 和 AOP(面向方面编程)
- spring学习笔记8--使用spring进行面向切面的(AOP)编程(2)XML配置方式
- Spring概况---轻量级的控制反转(Ioc)和面向切面(AOP)的容器
- Spring的控制反转(IoC)和面向切面编程(AOP)的概念浅析。
- 依赖注入(DI)和控制反转(IOC)的详细讲解 spring容器(spring注解实现,而不是xml配置文件)
- 使用spring进行属性注入的实例解析(spring面向切面和控制反转)。
- 面向切面(AOP)之Spring接口方式 schema配置方式 aspectj注解方式
- Spring AOP学习笔记(4):AOP切面优先级&切面表达式重用&xml配置方式
- java+spring切面编程(aop)spring控制反转(ioc)+hibenrate对象关系映射(ORM) 学习网址
- 讲解 Ioc 控制反转和 AOP 的文章(转载)
- C语言中的Sleep函数
- UI 设计规范
- alter table move的用途
- how to read source code of angular?
- php 适配器模式
- Spring学习一:IOC(控制反转)和AOP(面向切面)的xml配置和注解方式
- Python字符串方法详细介绍1_填充
- hdu 3622 Bomb Game(2-SAT,二分)
- 链表
- 【Android学习】四种布局方式
- 两个int整数m和n的二进制表达有多少个位不同
- 翻转字符串i am a student
- UI--单行文本水平触摸滑动效果
- 二分查找算法