關(guān)于@Component注解的含義說明
一、注解分類
1、@controller
:controller控制器層(注入服務(wù))
2、@service
:service服務(wù)層(注入dao)
3、@repository
:dao持久層(實(shí)現(xiàn)dao訪問)
4、@component
:標(biāo)注一個(gè)類為Spring容器的Bean,(把普通pojo實(shí)例化到spring容器中,相當(dāng)于配置文件中的<bean id="" class=""/>)
二、@Component 注解含義
@Component: 標(biāo)注Spring管理的Bean,使用@Component注解在一個(gè)類上,表示將此類標(biāo)記為Spring容器中的一個(gè)Bean。
三、基于@Component擴(kuò)展的注解
@Repository
:
@Repository本身是基于@Component注解的擴(kuò)展,被@Repository注解的POJO類表示DAO層實(shí)現(xiàn),從而見到該注解就想到DAO層實(shí)現(xiàn),使用方式和@Component相同;
@Service
:
@Service本身是基于@Component注解的擴(kuò)展,被@Service注解的POJO類表示Service層實(shí)現(xiàn),從而見到該注解就想到Service層實(shí)現(xiàn),使用方式和@Component相同;
@Controller
:
@Controller本身是基于@Component注解的擴(kuò)展,被@Controller注解的類表示W(wǎng)eb層實(shí)現(xiàn),從而見到該注解就想到Web層實(shí)現(xiàn),使用方式和@Component相同;
Tips:使用@Component,@Service,@Controller,@Repository注解的類,表示把這些類納入到spring容器中進(jìn)行管理,同時(shí)也是表明把該類標(biāo)記為Spring容器中的一個(gè)Bean。
四、component的掃描組件
下面寫這行配置是引入component的掃描組件
<context:component-scan base-package=”com.mmnc”>
其中base-package為指定需要掃描的包(含所有子包) ,掃描被@Service、@Controller、@Repository、@Component等注解標(biāo)注的Java類,將其掃描注入到Spring容器,注入成Bean:
@Service
用于標(biāo)注業(yè)務(wù)層組件@Controller
用于標(biāo)注控制層組件(如struts中的action)@Repository
用于標(biāo)注數(shù)據(jù)訪問組件,即DAO組件.@Component
泛指組件,當(dāng)組件不好歸類的時(shí)候,我們可以使用這個(gè)注解進(jìn)行標(biāo)注,標(biāo)識為一個(gè)Bean。
五、方法初始化和銷毀
從Java EE5規(guī)范開始,Servlet增加了兩個(gè)影響Servlet生命周期的注解: @PostConstruct和@PreConstruct ,這兩個(gè)注解被用來修飾一個(gè)非靜態(tài)的void()方法,而且這個(gè)方法不能有拋出異常聲明,標(biāo)注方法的初始化和銷毀,當(dāng)你需要在系統(tǒng)啟動時(shí)提前設(shè)置一下變量或者設(shè)置值操作時(shí),可以使用@PostConstruct注解進(jìn)行項(xiàng)目啟動時(shí)設(shè)置來完成,當(dāng)你需要處理關(guān)閉資源或者發(fā)送通知相關(guān)操作時(shí)可以使用@PreConstruct 完成。
1. @PostConstruct注解
被@PostConstruct修飾的方法會在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會被服務(wù)器調(diào)用一次,類似于Servlet的inti()方法。被@PostConstruct修飾的方法會在構(gòu)造函數(shù)之后,init()方法之前運(yùn)行。
2. @PreDestroy注解
被@PreDestroy修飾的方法會在服務(wù)器卸載Servlet的時(shí)候運(yùn)行,并且只會被服務(wù)器調(diào)用一次,類似于Servlet的destroy()方法。被@PreDestroy修飾的方法會在destroy()方法之后運(yùn)行,在Servlet被徹底卸載之前。
加載順序如圖:
在Spring中可以使用以下方式指定初始化方法和銷毀方法(方法名任意):
//對象創(chuàng)建并賦值之后調(diào)用 @PostConstruct public void init() { System.out.println("對象創(chuàng)建并賦值之后調(diào)用..."); }
和
//容器移除對象之前 @PreDestroy public void detory(){ System.out.println("容器移除對象之前執(zhí)行..."); }
3. 示例
@Controller @Lazy(false) public class ServletInit { @Autowired private PCASigninServlet pcaSigninServlet; @Autowired private PCASignoutServlet pcaSignoutServlet; @Autowired private PCAInitServlet pcaInitServlet; @Autowired private PCALogoutServlet pcaLogoutServlet; @Autowired private PCAInfoServlet pcaInfoServlet; @Autowired private HelloServlet helloServlet; @Autowired @Qualifier("handler") private WebAppContext webapp; @PostConstruct void init(){ Server server = new Server(8848); ServletContextHandler contextHander = new ServletContextHandler(ServletContextHandler.SESSIONS); contextHander.setContextPath("/"); System.out.println("start init"); HandlerCollection hc =new HandlerCollection(); hc.setHandlers(new Handler[]{webapp, contextHander}); server.setHandler(hc); System.out.println("addServlet /hello"); contextHander.addServlet(new ServletHolder(helloServlet), "/hello"); contextHander.addServlet(new ServletHolder( pcaSigninServlet), "/pca/signin"); contextHander.addServlet(new ServletHolder( pcaSignoutServlet), "/pca/signout"); contextHander.addServlet(new ServletHolder( pcaInitServlet), "/pca/init"); contextHander.addServlet(new ServletHolder( pcaLogoutServlet), "/pca/logout"); contextHander.addServlet(new ServletHolder( pcaInfoServlet), "/pca/info"); try { System.out.println("server start"); server.start(); server.join(); System.out.println("server stop"); } catch (Exception e) { e.printStackTrace(); } } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
聊聊spring boot的WebFluxTagsProvider的使用
這篇文章主要介紹了聊聊spring boot的WebFluxTagsProvider的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07分布式系統(tǒng)中的降級熔斷設(shè)計(jì)問題面試
這篇文章主要為大家介紹了分布式系統(tǒng)中的降級熔斷設(shè)計(jì)問題面試解答,有需要的朋友可以借鑒參考下,希望能有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03簡析Java中的util.concurrent.Future接口
這篇文章主要介紹了簡析Java中的util.concurrent.Future接口,作者把future歸結(jié)為在未來得到目標(biāo)對象的占位符,需要的朋友可以參考下2015-07-07java并發(fā)容器ConcurrentHashMap深入分析
這篇文章主要為大家介紹了java并發(fā)容器ConcurrentHashMap使用示例及深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Java基數(shù)排序radix sort原理及用法解析
這篇文章主要介紹了Java基數(shù)排序radix sort原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06