Springアノテーションは、Javaのリフレクションメカニズムを最大限に活用してクラス構造情報を取得できるため、構成作業を効果的に削減できます。たとえば、JPAアノテーションを使用してORMマッピングを構成する場合、PO属性名、タイプ、およびその他の情報を指定する必要はありません。リレーションシップテーブルフィールドがPO属性名およびタイプと一致している場合は、指定する必要もありません。この情報はすべてJavaリフレクションメカニズムを介して取得できるため、タスク属性マッピング情報を記述します。
次の例は、JSP + Servlet + JDBCプロジェクトで実行されます。
1. daoレイヤーでアノテーション@Repositoryを使用します。
アノテーションは、インターフェースではなく、インターフェースの実装クラスで記述されることに注意してください。Springがクラスパス内のクラスをスキャンして@Repositoryアノテーションを認識するためには、XML構成ファイル内のBeanの自動スキャンを有効にする必要があります。
package com.gx.dao.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.gx.dao.IBasicsDataDao;
import com.gx.po.User;
//value="basicsDataDao"中的basicsDataDao就是这个接口在spring容
@Repository(value="basicsDataDao")
public class BasicsDataImpl implements IBasicsDataDao {
@Override
public List<User> selectAll() {
// TODO Auto-generated method stub
return null;
}
@Override
public User findById(int id) {
// TODO Auto-generated method stub
return null;
}
@Override
public int update(User t) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int insert(User t) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int deleteById(int id) {
// TODO Auto-generated method stub
return 0;
}
}
2.サービスレイヤーでアノテーション@Serviceを
使用します。アノテーションが使用された後、daoレイヤーをインスタンス化するために新しいメソッドは使用されなくなります。アノテーション@Autowiredを使用してdaoレイヤーを挿入します(クラスメンバー変数、メソッド、コンストラクターにアノテーションを付けて自動アセンブリ作業を完了できます)。SpringはdaoレイヤーのオブジェクトをuserDao変数(ここでは変数名の提案とdao)に挿入します。レイヤー注釈の値は一貫性が保たれています。@Resourceアノテーションを使用して、daoレイヤーを挿入することもできます。@Resourceアノテーションと@Autowiredアノテーションの両方を使用して、依存性注入を実装します。デフォルトでは、@ AutowriedのみがbyTypeに従って自動的に挿入され、@ ResourceはbyNameに従って自動的に挿入されます。
package com.gx.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gx.dao.IBasicsDataDao;
import com.gx.po.User;
import com.gx.service.IBasicsDataService;
@Service(value="basicsDataService")
public class BasicsDataServiceImpl implements IBasicsDataService {
//第一种写法:自动装配
@Autowired
private IBasicsDataDao basicsDataDaoOne;
//第二种写法
@Resource
private IBasicsDataDao basicsDataDaoTwo;
@Override
public List<User> selectAll() {
// TODO Auto-generated method stub
return basicsDataDaoOne.selectAll();
}
}
3. Springは、applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!-- 开启注解 -->
<context:annotation-config />
<!-- 配置扫描路径, 去扫描有注解的包名-->
<context:component-scan base-package="com.gx.dao,com.gx.service,com.gx.aop" />
<!-- 自动为 spring容器中那些配置@Aspect切面的bean创健建代理,放入切面 -->
<aop:aspectj-autoproxy />
</beans>