Spring 經常使用註解的使用

咱們都知道而且會使用Spring提供的依賴注入功能,只要在Spring的容器中使用<bean>標籤,指定了id和class的屬性,spring就會在咱們須要使用的使用自動的注入進程序裏面,固然這個自動注入的功能依賴了註解這個功能,不然咱們須要本身去容器中經過如下方式去手動取java

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
OBJ obj=(BOJ) ctx.getBean("id");

Spring經常使用的標籤

1. @Autowiredweb

顧名思義,自動裝配,策略是根據類型進行匹配,要去符合要求的類型只有一個(多個報錯),由於根據類型就不須要根據名字,get/set方法就用不到,能夠根據我的需求選擇刪除或者保留。也不用使用<bean>的property屬性。值得注意的是若是同時配置了property和@Autowired,那麼配置文件的優先級要比註解的高,因此不要把get/set方法忘記了。spring

@Autowired註解是有屬性的,request屬性表示該對象是不是必須的,若是寫做@Autowired(request=false)就表示該對象不是必須的,Spring找不到就返回null。session

雖然寫了@Autowired可是仍是想經過名字匹配,能夠加上@Qualifier標籤mvc

@Autowired() @Qualifier("baseDao")    
private BaseDao baseDao;

2. @Resourceapp

public class Zoo {
    
    @Resource(name="tiger")
    private Tiger tiger;
    
    @Resource(type=Monkey.class)
    private Monkey monkey;
    
    public String toString(){
        return tiger + "\n" + monkey;
    }
}

@Resource的策略有點複雜主要包括如下幾種異步

(1)、@Resource沒有設置屬性,那麼其策略是先根據name去匹配bean,當註解寫在字段上時,name默認取字段名。spa

(2)、指定了name或者type屬性,則根據指定的去匹配。prototype

(3)、指定了name和type屬性,兩個必須都要知足,任何一個出錯都報錯。component

(4)、@Resource是J2EE的註解,而不是Spring

3. @Service

和@Controller、@Repository、@Component都類似,用來區別不一樣的mvc層,都能被Spring掃描到,通常寫在類上面,用來標註類。

@Service的做用

(1)、將被修飾的類申明爲bean,

(2)、修飾的類在bean中的id是類名的小寫

若想本身指定名字能夠寫做@Service("xxx")

3. @Scope

屬性值有prototype、request、session、global session等

@scope默認是單例模式(singleton)

@scope("prototype")

  表示每次獲取Bean的時候會有一個新的實例

@scope("request")

  表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效,配置實例:
  request、session、global session使用的時候首先要在初始化web的web.xml中作以下配置:
<web-app>
   ...
  <listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
   ...
</web-app>

@scope("session")

  session做用域表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效

使用註解來構造IOC容器

<context:component-scan>在xml配置了這個標籤後,spring能夠自動去掃描base-pack下面或者子包下面的java文件,若是掃描到有@Component @Controller @Service等這些註解的類,則把這些類註冊爲bean。

若是配置了<context:component-scan>那麼<context:annotation-config/>標籤就能夠不用再xml中配置了,由於前者包含了後者。

如:在base-package指明一個包

<context:component-scan base-package="cn.gacl.java"/>

代表cn.gacl.java包及其子包中,若是某個類的頭上帶有特定的註解【@Component/@Repository/@Service/@Controller】,就會將這個對象做爲Bean註冊進Spring容器。也能夠在<context:component-scan base-package=」 」/>中指定多個包,如:

<context:component-scan base-package="cn.gacl.dao.impl,cn.gacl.service.impl,cn.gacl.action"/>

使用Spring經常使用註解彙總 

@Configuration把一個類做爲一個IoC容器,它的某個方法頭上若是註冊了@Bean,就會做爲這個Spring容器中的Bean。@Scope註解 做用域@Lazy(true) 表示延遲初始化@Service用於標註業務層組件、 @Controller用於標註控制層組件(如struts中的action)@Repository用於標註數據訪問組件,即DAO組件。@Component泛指組件,當組件很差歸類的時候,咱們可使用這個註解進行標註。@Scope用於指定scope做用域的(用在類上)@PostConstruct用於指定初始化方法(用在方法上)@PreDestory用於指定銷燬方法(用在方法上)@DependsOn:定義Bean初始化及銷燬時的順序@Primary:自動裝配時當出現多個Bean候選者時,被註解爲@Primary的Bean將做爲首選者,不然將拋出異常@Autowired 默認按類型裝配,若是咱們想使用按名稱裝配,能夠結合@Qualifier註解一塊兒使用。以下:@Autowired @Qualifier("personDaoBean") 存在多個實例配合使用@Resource默認按名稱裝配,當找不到與名稱匹配的bean纔會按類型裝配。@PostConstruct 初始化註解@PreDestroy 摧毀註解 默認 單例  啓動就加載@Async異步方法調用

相關文章
相關標籤/搜索