記事のディレクトリ
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();
}
残りは通常通り営業しています。