javascript
Spring 常用注入注解(annotation)和其对应xml标签
使用注解需要修改bean.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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/><bean class="example.SimpleMovieCatalog"><qualifier value="main"/><!-- inject any dependencies required by this bean --></bean><bean class="example.SimpleMovieCatalog"><qualifier value="action"/><!-- inject any dependencies required by this bean --></bean><bean id="movieRecommender" class="example.MovieRecommender"/></beans>?
黃色部分內容會使spring加載AutowiredAnnotationBeanPostProcessor等可以識別注解的bean。
?
?
?
?
@AutoWire,自動注入,一般放在屬性的set方法上,會為該屬性自動注入。默認的注入是使用byType,就是根據xml中bean的類型去匹配。
可以和@Qualifier匹配使用。
?
?
?
注解實現方式:
package com.bjsxt.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
?
public class UserService {
???
??? private UserDAO userDAO;?
???
??? public void init() {
??????? System.out.println("init");
??? }
???
??? public void add(User user) {
??????? userDAO.save(user);
??? }
??? public UserDAO getUserDAO() {
??????? return userDAO;
??? }
???
??? @Autowired
??? public void setUserDAO(@Qualifier("u") UserDAO userDAO) {//Qualifier:根據qualifier標簽去查找,也可以根據name或者id去查找匹配的bean
??????? this.userDAO = userDAO;
??? }
???
???
??? public void destroy() {
??????? System.out.println("destroy");
??? }
}
?
?
對應的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"?? ?????? xsi:schemaLocation="http://www.springframework.org/schema/beans?? ?????????? http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"?? ????????? >
? <bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl"> ????? <property name="daoId" value="1"></property>??? ? </bean>??? ? ? <bean name="userDAO2" class="com.bjsxt.dao.impl.UserDAOImpl">??? ????? <property name="daoId" value="2"></property>??? ? </bean>?? ??? ? <bean id="userService" class="com.bjsxt.service.UserService" scope="prototype" autowire="byType"><!-- 也可以設在beans標簽上,好像是default-autowire scope="prototype"表示每次都創建一個新的實例對應的有singleton--只有一個實例 -->?? ? </bean>???
</beans>
?
?
?
?
@Resource
此標簽也用于注入屬性。相對來說用的比較多。
該標簽需要導入J2EE的JAR包:common-annotations.jar
javax.annotation.Resource,默認byName,如果找不到對應name會去找對應type
?
??? @Resource
??? public void setUserDAO(UserDAO userDAO) {?
??????? this.userDAO = userDAO;
??? }
?
@Resource(name=”uuu”) //可以byName
?
以上兩種注解雖然可以在代碼中設置注入,但是還要求在xml文件中配置bean。
Component可以省去。
5.10.3 Using filters to customize scanning
By default, classes annotated with @Component, @Repository, @Service, @Controller, or a custom annotation that itself is annotated with @Component are the only detected candidate components. However, you can modify and extend this behavior simply by applying custom filters. Add them as include-filter or exclude-filter sub-elements of thecomponent-scan element. Each filter element requires the type and expression attributes. The following table describes the filtering options.
?
?
<?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: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 />
??? <context:component-scan base-package="com.bjsxt"/>
</beans>
?
scan:掃描。表示掃描某個包和其自包,將能作為組件(添加了@Component)的內容解析出來。
?
package com.bjsxt.dao.impl;
import org.springframework.stereotype.Component;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
@Component("u") //這樣寫表示這個類是一個組件,在另外一個類看來它就是一個資源。不指定它的key默認會是userDAOImpl(即類名首字母改成小寫)
public class UserDAOImpl implements UserDAO {
??? public void save(User user) {
??????? //Hibernate
??????? //JDBC
??????? //XML
??????? //NetWork
??????? System.out.println("user saved!");
??? }
}
?
package com.bjsxt.service;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
@Component("userService")
public class UserService {
???
??? private UserDAO userDAO;?
???
??? public void init() {
??????? System.out.println("init");
??? }
???
??? public void add(User user) {
??????? userDAO.save(user);
??? }
??? public UserDAO getUserDAO() {
??????? return userDAO;
??? }
???
??? @Resource(name="u")
??? public void setUserDAO( UserDAO userDAO) {
??????? this.userDAO = userDAO;
??? }
???
???
??? public void destroy() {
??????? System.out.println("destroy");
??? }
}
?
?
?
?
額外的一些內容:
<bean id="userService" class="com.bjsxt.service.UserService" init-method="init" destroy-method="destroy" scope="prototype">
scope對應的注解是@Scope(“”)
init-method對應的注解是@PostConstruct,表示構造完成之后再執行它注解的方法。
destroy-method對應的注解是@PreDestroy,容器銷毀之前。
總結
以上是生活随笔為你收集整理的Spring 常用注入注解(annotation)和其对应xml标签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css怎样让table去掉边距
- 下一篇: javascript中求根的函数有哪些