1. 使ç¨Spring注解æ¥æ³¨å
¥å±æ§
1.1. 使ç¨æ³¨è§£ä»¥åæ们æ¯ææ ·æ³¨å
¥å±æ§ç
ç±»çå®ç°ï¼
Java代ç
public class UserManagerImpl implements UserManager {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
[java] view plain copy
public class UserManagerImpl implements UserManager {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
é
ç½®æ件ï¼
Java代ç
<bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl">
<property name="userDao" ref="userDao" />
</bean>
<bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
[java] view plain copy
<bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl">
<property name="userDao" ref="userDao" />
</bean>
<bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
1.2. å¼å
¥@Autowired注解ï¼ä¸æ¨è使ç¨ï¼å»ºè®®ä½¿ç¨@Resourceï¼
ç±»çå®ç°ï¼å¯¹æååéè¿è¡æ 注ï¼
Java代ç
public class UserManagerImpl implements UserManager {
@Autowired
private UserDao userDao;
...
}
[java] view plain copy
public class UserManagerImpl implements UserManager {
@Autowired
private UserDao userDao;
...
}
æè
ï¼å¯¹æ¹æ³è¿è¡æ 注ï¼
Java代ç
public class UserManagerImpl implements UserManager {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
[java] view plain copy
public class UserManagerImpl implements UserManager {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
...
}
é
ç½®æ件
Java代ç
<bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl" />
<bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
[java] view plain copy
<bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl" />
<bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
@Autowiredå¯ä»¥å¯¹æååéãæ¹æ³åæé å½æ°è¿è¡æ 注ï¼æ¥å®æèªå¨è£
é
çå·¥ä½ã以ä¸ä¸¤ç§ä¸åå®ç°æ¹å¼ä¸ï¼@Autowiredçæ
注ä½ç½®ä¸åï¼å®ä»¬é½ä¼å¨Springå¨åå§åuserManagerImplè¿ä¸ªbeanæ¶ï¼èªå¨è£
é
userDaoè¿ä¸ªå±æ§ï¼åºå«æ¯ï¼ç¬¬ä¸ç§å®ç°
ä¸ï¼Springä¼ç´æ¥å°UserDaoç±»åçå¯ä¸ä¸ä¸ªbeanèµå¼ç»userDaoè¿ä¸ªæååéï¼ç¬¬äºç§å®ç°ä¸ï¼Springä¼è°ç¨
setUserDaoæ¹æ³æ¥å°UserDaoç±»åçå¯ä¸ä¸ä¸ªbeanè£
é
å°userDaoè¿ä¸ªå±æ§ã
1.3. 让@Autowiredå·¥ä½èµ·æ¥
è¦ä½¿@Autowiredè½å¤å·¥ä½ï¼è¿éè¦å¨é
ç½®æ件ä¸å å
¥ä»¥ä¸ä»£ç
Java代ç
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
[java] view plain copy
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
1.4. @Qualifier
@Autowiredæ¯æ ¹æ®ç±»åè¿è¡èªå¨è£
é
çãå¨ä¸é¢çä¾åä¸ï¼å¦æå½Springä¸
ä¸æä¸åå¨ä¸æ¢ä¸ä¸ªUserDaoç±»åçbeanæ¶ï¼å°±ä¼æåºBeanCreationExceptionå¼å¸¸ï¼å¦æSpringä¸ä¸æä¸ä¸åå¨
UserDaoç±»åçbeanï¼ä¹ä¼æåºBeanCreationExceptionå¼å¸¸ãæ们å¯ä»¥ä½¿ç¨@Qualifieré
å@Autowiredæ¥
解å³è¿äºé®é¢ã
1. å¯è½åå¨å¤ä¸ªUserDaoå®ä¾
Java代ç
@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
this.userDao = userDao;
}
[java] view plain copy
@Autowired
public void setUserDao(@Qualifier("userDao") UserDao userDao) {
this.userDao = userDao;
}
è¿æ ·ï¼Springä¼æ¾å°id为userDaoçbeanè¿è¡è£
é
ã
2. å¯è½ä¸åå¨UserDaoå®ä¾
Java代ç
@Autowired(required = false)
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
[java] view plain copy
@Autowired(required = false)
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
1.5. @Resourceï¼JSR-250æ å注解ï¼æ¨è使ç¨å®æ¥ä»£æ¿Springä¸æç@Autowired注解ï¼
Spring ä¸ä½æ¯æèªå·±å®ä¹ç@Autowired注解ï¼è¿æ¯æå 个ç±JSR-250è§èå®ä¹ç注解ï¼å®ä»¬åå«æ¯@Resourceã@PostConstruct以å@PreDestroyã
@Resource
çä½ç¨ç¸å½äº@Autowiredï¼åªä¸è¿@AutowiredæbyTypeèªå¨æ³¨å
¥ï¼è@Resourceé»è®¤æbyNameèªå¨æ³¨å
¥ç½¢äºã
@Resourceæ两个å±æ§æ¯æ¯è¾éè¦çï¼åå«æ¯nameåtypeï¼Springå°@Resource注解çnameå±æ§è§£æ为beançååï¼è
typeå±æ§å解æ为beançç±»åãæ以å¦æ使ç¨nameå±æ§ï¼å使ç¨byNameçèªå¨æ³¨å
¥çç¥ï¼è使ç¨typeå±æ§æ¶å使ç¨byTypeèªå¨æ³¨å
¥ç
ç¥ãå¦ææ¢ä¸æå®nameä¹ä¸æå®typeå±æ§ï¼è¿æ¶å°éè¿åå°æºå¶ä½¿ç¨byNameèªå¨æ³¨å
¥çç¥ã
@Resourceè£
é
顺åº
å¦æåæ¶æå®äºnameåtypeï¼åä»Springä¸ä¸æä¸æ¾å°å¯ä¸å¹é
çbeanè¿è¡è£
é
ï¼æ¾ä¸å°åæåºå¼å¸¸
å¦ææå®äºnameï¼åä»ä¸ä¸æä¸æ¥æ¾å称ï¼idï¼å¹é
çbeanè¿è¡è£
é
ï¼æ¾ä¸å°åæåºå¼å¸¸
å¦ææå®äºtypeï¼åä»ä¸ä¸æä¸æ¾å°ç±»åå¹é
çå¯ä¸beanè¿è¡è£
é
ï¼æ¾ä¸å°æè
æ¾å°å¤ä¸ªï¼é½ä¼æåºå¼å¸¸
å¦ææ¢æ²¡ææå®nameï¼å没ææå®typeï¼åèªå¨æç
§byNameæ¹å¼è¿è¡è£
é
ï¼è§2ï¼ï¼å¦æ没æå¹é
ï¼ååé为ä¸ä¸ªåå§ç±»åï¼UserDaoï¼è¿è¡å¹é
ï¼å¦æå¹é
åèªå¨è£
é
ï¼
1.6. @PostConstructï¼JSR-250ï¼
å¨æ¹æ³ä¸å ä¸æ³¨è§£@PostConstructï¼è¿ä¸ªæ¹æ³å°±ä¼å¨Beanåå§åä¹å被Spring容å¨æ§è¡ï¼æ³¨ï¼Beanåå§åå
æ¬ï¼å®ä¾åBeanï¼å¹¶è£
é
Beançå±æ§ï¼ä¾èµæ³¨å
¥ï¼ï¼ã
å®çä¸ä¸ªå
¸åçåºç¨åºæ¯æ¯ï¼å½ä½ éè¦å¾Beané注å
¥ä¸ä¸ªå
¶ç¶ç±»ä¸å®ä¹çå±æ§ï¼èä½ åæ æ³å¤åç¶ç±»çå±æ§æå±æ§çsetteræ¹æ³æ¶ï¼å¦ï¼
Java代ç
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
private SessionFactory mySessionFacotry;
@Resource
public void setMySessionFacotry(SessionFactory sessionFacotry) {
this.mySessionFacotry = sessionFacotry;
}
@PostConstruct
public void injectSessionFactory() {
super.setSessionFactory(mySessionFacotry);
}
...
}
[java] view plain copy
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
private SessionFactory mySessionFacotry;
@Resource
public void setMySessionFacotry(SessionFactory sessionFacotry) {
this.mySessionFacotry = sessionFacotry;
}
@PostConstruct
public void injectSessionFactory() {
super.setSessionFactory(mySessionFacotry);
}
...
}
è¿ééè¿@PostConstructï¼ä¸ºUserDaoImplçç¶ç±»éå®ä¹çä¸ä¸ªsessionFactoryç§æå±æ§ï¼æ³¨å
¥äºæ们èª
å·±å®ä¹çsessionFactoryï¼ç¶ç±»çsetSessionFactoryæ¹æ³ä¸ºfinalï¼ä¸å¯å¤åï¼ï¼ä¹åæ们就å¯ä»¥éè¿è°ç¨
super.getSessionFactory()æ¥è®¿é®è¯¥å±æ§äºã
1.7. @PreDestroyï¼JSR-250ï¼
å¨æ¹æ³ä¸å ä¸æ³¨è§£@PreDestroyï¼è¿ä¸ªæ¹æ³å°±ä¼å¨Beanåå§åä¹å被Spring容å¨æ§è¡ãç±äºæ们å½åè¿æ²¡æéè¦ç¨å°å®çåºæ¯ï¼è¿éä¸ä¸å»æ¼ç¤ºãå
¶ç¨æ³å@PostConstructã
1.8. 使ç¨<context:annotation-config />ç®åé
ç½®
Spring2.1
æ·»å äºä¸ä¸ªæ°çcontextçSchemaå½å空é´ï¼è¯¥å½å空é´å¯¹æ³¨é驱å¨ãå±æ§æ件å¼å
¥ãå è½½æç»å
¥çåè½æä¾äºä¾¿æ·çé
ç½®ãæ们ç¥é注éæ¬èº«æ¯ä¸ä¼
åä»»ä½äºæ
çï¼å®ä»
æä¾å
æ°æ®ä¿¡æ¯ãè¦ä½¿å
æ°æ®ä¿¡æ¯çæ£èµ·ä½ç¨ï¼å¿
须让è´è´£å¤çè¿äºå
æ°æ®çå¤çå¨å·¥ä½èµ·æ¥ã
AutowiredAnnotationBeanPostProcessor
åCommonAnnotationBeanPostProcessorå°±æ¯å¤çè¿äºæ³¨éå
æ°æ®çå¤çå¨ãä½æ¯ç´æ¥å¨Springé
ç½®æ件ä¸å®ä¹è¿äº
Beanæ¾å¾æ¯è¾ç¬¨æãSpring为æ们æä¾äºä¸ç§æ¹ä¾¿ç注åè¿äºBeanPostProcessorçæ¹å¼ï¼è¿å°±
æ¯<context:annotation-config />ï¼
Java代ç
<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-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
</beans>
[java] view plain copy
<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-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
</beans>
<context:annotationconfig
/>å°éå¼å°åSpring容å¨æ³¨åAutowiredAnnotationBeanPostProcessorã
CommonAnnotationBeanPostProcessorã
PersistenceAnnotationBeanPostProcessor以å
RequiredAnnotationBeanPostProcessorè¿4个BeanPostProcessorã