[春] xml設定ファイルの終わり-アノテーション開発

春のオリジナルアノテーション

注釈 説明
@成分 Beanをインスタンス化するためにクラスで使用されます
@コントローラ Beanをインスタンス化するためにクラスで使用されます(Webレイヤーセマンティクスを使用)
@サービス Beanをインスタンス化するためにクラスで使用されます(サービスレイヤーセマンティクスを使用)
@Repository Beanをインスタンス化するためにクラスで使用されます(daoレイヤーセマンティクスを使用)
@Autowired 参照型を挿入します
@Qualifier 参照型を挿入します
@資源 参照型を挿入します
@値 基本タイプを注入する
@範囲 Beanスコープの構成
@PostConstruct Beanライフサイクル構成(初期化時に呼び出されます)
@PreDestroy Beanのライフサイクル構成(破棄されたときに呼び出されます)

コンポーネントスキャンを構成する

コンポーネントスキャンはapplicationContext.xmlで構成され、パッケージとそのサブパッケージの下の注釈をスキャンするようにSpringに指示します。

注:構成コンポーネントのスキャンは、コンテキスト名前空間で実行する必要があるため、コンテキスト名前空間(およびその制約パス)を追加することを忘れないでください。

<!-- 配置组件扫描 -->
<context:component-scan base-package="service" />
<context:component-scan base-package="dao" />

@ComponentはBeanをインスタンス化するために使用されます

@Component("userDao")
public class UserDaoImpl implements UserDao {
    
    

    public void sayHi() {
    
    
        System.out.println("Hello!!!");
    }
}

@ Controller / @ Service / @ Repositoryは、セマンティクスを使用してBeanをインスタンス化するためにも使用されます

@Repository("userDao")
public class UserDaoImpl implements UserDao {
    
    

    public void sayHi() {
    
    
        System.out.println("Hello!!!");
    }
}

@Autowiredは、クラス名に基づいて参照を自動的に挿入します(クラスのスプリングコンテナに複数のBeanがある場合、エラーが報告されます)

@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Autowired
    private UserDao userDao;

    public void sayHi() {
    
    
        userDao.sayHi();
    }
}

@ Autowired + @ Qualifierは、IDに従って参照を挿入します(2つ一緒に、書き込みも少なくありません)

@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Autowired
	@Qualifier("userDao")
    private UserDao userDao;

    public void sayHi() {
    
    
        userDao.sayHi();
    }
}

@Resourceは、IDに基づいて参照を挿入します(@ Autowired + @ Qualifierと完全に同等)

@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Resource(name = "userDao")
    private UserDao userDao;

    public void sayHi() {
    
    
        userDao.sayHi();
    }
}

@Valueは基本的なデータ型を挿入します(通常はSPEL構文と組み合わせて使用​​されます)

<!-- 在applicationContext.xml引入properties资源文件,就将这些键值对“倒入”了spring容器中 -->
<context:property-placeholder location="classpath:xxx.properties" />
@Component("userService")
public class UserServiceImpl implements UserService {
    
    

	@Value("root")
	private String username;

	@Value("${password}")
	private String password;

	// ...
}

@Scope構成スコープ(シングルトンシングルトン/プロトタイプ複数ケース)

@Component("userDao")
@Scope("prototype")
public class UserDaoImpl implements UserDao {
    
    

    // ...
}

@ PostConstruct / @ PreDestroy構成ライフサイクル(初期化/破棄中にメソッドが自動的に呼び出されます)

@Component("userDao")
public class UserDaoImpl implements UserDao {
    
    

    @PostConstruct
    public void init() {
    
    
        System.out.println("初始化时调用我 >_<");
    }

 	// ...

    @PreDestroy
    public void destroy() {
    
    
        System.out.println("销毁时调用我 >_<");
    }
}

 
 
 

春の新しい注釈

上記の従来のアノテーションでは、xml構成ファイルを完全に置き換えることはできません。たとえば、次の状況です。

  1. 非カスタムBean(サードパーティから直接提供されたBean):<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">...</bean>
  2. リソースファイルをロードします。<context:property-placeholder location="xxx.properties" />
  3. コンポーネントスキャンを構成します。<context:component-scan base-package="xxx" />
  4. サブモジュール開発:<import resource="applicationContext-xxx.xml" />  

上記の問題を解決するために、いくつかの巧妙なアイデアとデザインを使用しています。

  1. applicationContext.xmlで構成しなくなりましたが、これらの構成をconfig.SpringConfiguration.classクラスに転送します
  2. SPEL構文はapplicationContext.xmlで使用できますが、config.SpringConfiguration.classクラスのJavaコードは明らかに使用できません。この問題を巧妙に解決できます。JavaコードはSPELを使用できませんが、アノテーションはSPELを使用できます。したがって、キーと値のペアの情報をアノテーションを介してメンバー変数に挿入し、これらのキーと値のペアの情報を間接的に使用できます。
  3. 最終的に、applicationContext.xmlは完全に廃止され、次のようにApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");置き換えられます。ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
注釈 説明
@Configuration これがSpring構成クラスであることをマークします
@豆 マークされた戻り値は、Springコンテナに直接配置されます
@PropertySource リソースファイルのロードに使用されます
@ComponentScan コンポーネントスキャンを構成するために使用されます
@インポート サブモジュール開発用
@Configuration 												// 表明这是一个配置类
@ComponentScan({
    
    "dao", "service"})							// 配置组件扫描
@PropertySource("classpath:jdbc.properties")				// 加载资源文件
@Import({
    
    xxxConfiguration.class, xxxConfiguration.class})		// 分模块开发
public class SpringConfiguration {
    
    

    @Value("${jdbc.driver}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean("dataSource")
    public DataSource getDataSource() throws Exception {
    
    
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

}

 
 
 
 

 
 
 
 

 
 
 
 

もっと> _ <

おすすめ

転載: blog.csdn.net/m0_46202073/article/details/113861798