Spring Frameworkチュートリアル(3):IOCアノテーションベースのBean管理

1.注釈の概要

  注釈とは:

  • 形式:注釈はコードの特殊マークであり、形式は@注釈名です(属性名=属性値、属性名=属性値...)。
  • 役割:クラス、メソッド、および属性に基づいて行動します。
  • 目的:xml構成を簡素化する。

  Springは、Bean管理でオブジェクトを作成するためのアノテーションを提供します。

  • @成分
  • @サービス
  • @コントローラ
  • @Repository

  Springは、Bean管理にプロパティを挿入するためのアノテーションを提供します。

  • @AutoWiredは、タイプに基づいて属性を挿入します
  • @Qualifierは、属性名に基づいて属性を挿入します
  • @Resourceは、名前またはタイプに基づいて属性を挿入できます
  • @Valueは、基本型または組み込みの参照クラス(Stringなど)を挿入します

2つ目は、オブジェクトを作成する

  これまでに学んだことと区別するために、新しいプロジェクトspring5_demo1を作成します。これは、この章の新しいプロジェクトで示されます。

(1)最初のステップ:必要なjarパッケージをインポートします

  プロジェクトの下にディレクトリlibを作成し、前のプロジェクトのlibの下にあるすべてのjarパッケージをコピーし、コンピューターのspring-5.2.6.RELEASE-distフォルダーの下のlibsフォルダーの下に新しいjarを見つけます。パッケージspring-aop- 5.2.6.RELEASEもlibに入れられます。

  jarリソースのインポート:

  • IDEAプロジェクトで、[ファイル]-[プロジェクト構造]-[モジュール]-[依存関係]をクリックし、[+]記号をクリックします。
  • コピーした5つのjarパッケージの場所を見つけて選択し、インポートします。
  • [適用]をクリックしてから、[OK]をクリックします。

(2)コンポーネントスキャンをオンにします

  • srcの下にbean.xmlファイルを作成します。
  • コンテキスト名前空間を導入します。
	<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"//添加
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context //添加
    http://www.springframework.org/schema/context/spring-context.xsd">//添加
  • コンポーネントスキャンをオンにして、xmlのbeansタグで構成します。
	<!--开启组件扫描-->
    <context:component-scan base-package="com.wang"></context:component-scan>

(3)オブジェクトの作成アノテーションを使用する

  • com.wangの下にパッケージサービスを作成します。
  • 次に、サービスの下にクラスUserServiceを作成し、対応するアノテーションを追加します。
	package com.wang.service;
	import org.springframework.stereotype.Service;
	
	//相当于xml中<bean id="userService" class=...></bean>
	//注解的value属性可以省略不写,默认对象名就是首字母小写后的类名
	//Component、Service、Controller、Repository四个注解使用任意一个就行
	@Service(value="userService")
	public class UserSerivce {
    
    
	
	    public void add(){
    
    
	        System.out.println("service add...");
	    }
	}

(4)テスト

  • com.wangの下にパッケージテストを作成します。
  • テスト対象のTestDemoクラスを作成し、次のメソッドを実行します。
	package com.wang.test;
	import com.wang.service.UserSerivce;
	import org.junit.jupiter.api.Test;
	import org.springframework.context.ApplicationContext;
	import org.springframework.context.support.ClassPathXmlApplicationContext;
	
	public class TestDemo {
    
    
	    @Test
	    public void testUserService(){
    
    
	        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
	        UserSerivce userSerivce = context.getBean("userService", UserSerivce.class);
	        System.out.println(userSerivce);
	        userSerivce.add();
	    }
	}

ここに画像の説明を挿入

3つのコンポーネントスキャン構成

  スキャンするものとスキャンしないもの。次の2つの例を読んでください。

	<!--配置组件扫描示例1
    use-default-filters="false"表示使用自己配置的filter过滤器
    到com.wang中只扫描用@Controller注解的类-->
    <context:component-scan base-package="com.wang" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
 	<!--配置组件扫描示例2
    没有use-default-filters属性,表示使用默认配置的filter过滤器
    到com.wang中扫描所有内容,除了用@Controller注解的类-->
    <context:component-scan base-package="com.wang">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

4、属性注釈

  前述のように、注入されたプロパティには、一般的に使用される3つのアノテーションがあります。

  • @AutoWiredは、タイプに基づいて属性を挿入します
  • @Qualifierは、属性名に基づいて属性を挿入します
  • @Resourceは、名前またはタイプに基づいて属性を挿入できます
  • @Valueは、基本型または組み込みの参照クラス(Stringなど)を挿入します

  まず、com.wangの下にdaoパッケージを作成します。

(1)@AutoWired

  • 次のように、daoの下にUserDaoインターフェイスと対応する実装クラスUserDaoImplを作成します。
	package com.wang.dao;
	public interface UserDao {
    
    
	    void add();
	}
	
	@Repository//注意,注解写在实现类上而不是接口上
	public class UserDaoImpl implements UserDao {
    
    
	    @Override
	    public void add() {
    
    
	        System.out.println("dao add...");
	    }
	}
  • UserServiceクラスを次のように変更します。
	package com.wang.service;
	
	import com.wang.dao.UserDao;
	import org.springframework.beans.factory.annotation.Autowired;
	import org.springframework.stereotype.Service;
	
	@Service
	public class UserSerivce {
    
    
	    @Autowired //根据类型注入
	    private UserDao userDao;
	
	    public void add(){
    
    
	        System.out.println("service add...");
	        userDao.add();
	    }
	}
  • それをテストしてください、テストコードは変更されていません:
	@Test
    public void testUserService(){
    
    
        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
        UserSerivce userSerivce = context.getBean("userService", UserSerivce.class);

        System.out.println(userSerivce);
        userSerivce.add();
    }

ここに画像の説明を挿入

(2)@Qualifier

  @AutoWiredで使用します。

	@Autowired //根据类型注入
    @Qualifier(value="userDaoImpl") //根据名称注入,如果同类型的有多个,可以定位到一个
    private UserDao userDao;

(3)@Resource

	@Resource//根据类型进行注入
    private UserDao userDao;
	@Resource(name="userDaoImpl)//根据名称进行注入
    private UserDao userDao;

(4)@Value

	@Value(value="abc")
    private String uname;

5つの純粋なアノテーション開発

  xml構成ファイルを使用したり削除したりする必要はありません。

(1)構成クラスを作成します

  configパッケージはcom.wangの下に作成され、(xmlファイルの代わりに)構成クラスSpringConfigを格納します。

	package com.wang.config;
	import org.springframework.context.annotation.ComponentScan;
	import org.springframework.context.annotation.Configuration;
	
	@Configuration //作为配置类,替代xml文件
	@ComponentScan(basePackages = {
    
    "com.wang"}) //组件扫描配置
	public class SpringConfig {
    
    
	}

(2)テストクラスを書く(以前とは異なる)

	@Test
    public void testUserService(){
    
    
        ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);
        UserSerivce userSerivce = context.getBean("userService", UserSerivce.class);

        System.out.println(userSerivce);
        userSerivce.add();
    }

  残りは通常通り営業しています。

おすすめ

転載: blog.csdn.net/Tracycoder/article/details/112613341