1. 程式人生 > >Spring學習一:IOC(控制反轉)和AOP(面向切面)的xml配置和註解方式

Spring學習一:IOC(控制反轉)和AOP(面向切面)的xml配置和註解方式

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*/
@Aspect
public 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>


控制檯輸出


相關推薦

Spring學習IOC控制反轉AOP面向切面xml配置註解方式

Spring框架的作用:為了簡化java開發 Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的

Laravel 學習筆記深入理解控制反轉IoC依賴注入DI

目的:解耦和減少依賴關係; 控制反轉(IoC):由外部負責其依賴行為; 例如“超人”類不需要在其內部固化它的“超能力”,而是由外部來產生、組裝“超能力”,再通過“超人”的某個介面中植入; 只要“超能力”滿足某個介面,就能被超人所使用; 依賴注入(DI

Spring學習,依賴注入(DI)、控制反轉(IoC)和麵向切面(AOP)

依賴注入(DI)和控制反轉(IoC) 在日常編碼中經常遇到在一個類中呼叫另一個類的多個方法,所以就在一個類中new出需要用到的類,也就是組合模式。比如說A類裡面需要用到很多B類裡面的方法,所以要在A類裡面new一個B。 public class

Spring學習總結IOC基礎

spring概述 spring可以做很多事情,它為企業級開發提供了豐富的功能。但是這些功能的底層都依賴於它的兩個核心特性,控制反轉(IOC)和麵向切面(AOP)、 本篇文章主要介紹IOC。 現在 springboot 和spring cloud十分火爆,還是有必要看看兩者之間的關係的 S

spring學習筆記ioc容器高階特性

Spring容器的高階特性涉及到屬性編輯器,使用外部屬性檔案,國際化,容器事件等等; 今天講解一下屬性編輯器,使用外部資源,國際化。 屬性編輯器  如果你沒有了解過屬性編輯器,建議你先google一下,我簡單的解釋一下什麼是屬性編輯器,看一個新寫的有代表性的bean:pack

Spring框架學習筆記——IoCInversion of Control,控制反轉AOPAspect Oriented Programming,面向切面程式設計

1、Spring IoC IoC是一個Bean容器,在Spring中,它認為一切Java資源都是Java Bean,容器的目標就是管理這些Bean和它們之間的關係。所以在Spring IoC裡面裝載的各種Bean,也可以理解為Java的各種資源,包括Java Bean的建立、事件、行為和Java

laravel 學習筆記IoC服務容器依賴注入與控制反轉

容器,字面上理解就是裝東西的東西。常見的變數、物件屬性等都可以算是容器。一個容器能夠裝什麼,全部取決於你對該容器的定義。當然,有這樣一種容器,它存放的不是文字、數值,而是物件、物件的描述(類、介面)或者是提供物件的回撥,通過這種容器,我們得以實現許多高階的功能

Spring 學習 2- IOC原理 控制反轉/依賴註入

情況 map return obj 這一 運行 spring入門 lan 設計 控制反轉/依賴註入 最近,買了本spring入門書:spring In Action 。大致瀏覽了下感覺還不錯。就是入門了點。Manning的書還是不錯的,我雖然不像哪些只看Mannin

spring IOC控制反轉及DI依賴註入

version bsp rds 編碼 軟件 martin framework 結果 -i 什麽是ioc(控制反轉)    IOC是一種設計思想,用來降低代碼與程序之間的耦合程度,把兩個直接相關的事物把直接相關的部分交給第三方作為中轉從而降低 了耦合性,方便後期維護。控制反轉

談談對Spring IOC控制反轉的理解

學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對Spring Ioc的理解。

2.Spring學習筆記之 ————IoC(控制反轉)

控制反轉(IoC),是Spring裡一個專有的名詞,其意思就是說,物件的例項由Spring容器來進行建立而不是我們自己手動建立,當我們在Spring容器中設定好Bean屬性後,Spring容器就會自動建立其例項,我們只要去呼叫Spring的Bean就行。 接下來是例子:

Spring IOC控制反轉的三種依賴注入方式

1)、什麼是依賴注入(DI)和控制反轉(IOC) 依賴注入和控制反轉是對同一件事情的不同描述,從某個方面來講,就是他們描述的角度不同。 依賴注入是從應用程式的角度在描述,應用程式依賴容器建立並注入它所需要的外部資源; 控制反轉是從容器的角度在描述,描述完整點:容器控制應用程式,由容器反向的嚮應

spring框架ioc控制反轉第一講

  今天帶來的是框架的學習,從今天開始,將會和以前的專案有所不同,從分層和實現類上更加的規範,在將框架之前,首先要了解一下crm系統技術架構: CRM即客戶關係管理,是指企業用CRM技術來管理與客戶之間的關係。 1、應用業務整合。將獨立的市場管理, 銷售管理與售後服務進行整合,提供統一的運

Spring 使用註解方式實現IOCDI控制反轉依賴注入

Spring 使用註解的方式實現IOC和DI 註解的方式實現IOC&DI     1、IOC操作       1)@Component  :用於實現ioc控制反轉,屬性value用於實現物件

JavaEE框架——Spring入門基礎控制反轉Ioc切面技術Aop

一.簡介: Spring在英語中含義是春天,對於JavaEE開發者來說,Spring框架出現確實帶來了一股全新的春天的氣息。早在2002年,Rod Johson在其編著的《Expert one to one J2EE design anddevelopment》書中,對J

筆記——spring基本使用控制反轉IOC面向切面程式設計AOP、宣告式事務,事務隔離級別、事務傳播

spring溫習筆記 Spring是一個開放原始碼的設計層面框架,他解決的是業務邏輯層和其他各層的鬆耦合問題,因此它將面向介面的程式設計思想貫穿整個系統應用。 Spring 的控制反轉IOC、面向切面程式設計AOP等特性不多說。 本文核心內容:搭建一個Spring Dem

談談對Spring IOC控制反轉的理解--轉

學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對Spring Ioc的理解。 一、分享It

springIOC控制反轉AOP面向切面程式設計

       一直對spring的兩大特性IOC與AOP瞭解的模模糊糊,不知道怎麼區分,怎麼理解。 今天看了一篇講spring常用註解的文章和spring AOP的文章,引用這兩個作者的觀點,感覺對這兩個特性的瞭解清晰了很多。 IOC:中文名(控制反轉/依賴注入),可以看

三.Spring4學習-----IOC 控制反轉建立物件的三種方式

一.使用IOC來建立物件的三種方式 1.通過無參的構造方法創建出來 public class User { public User() { System.out.println("user的無參構造方法"); } private String name; pub

Spring源碼IOC原理解析

main 節點 定義 nat ner multicast esp loading more 版權聲明:本文為博主原創文章,轉載請註明出處,歡迎交流學習! 接著上一章節的內容,我們來分析當new一個FileSystemXmlApplicationContext對