日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

@Controller、@Service和@Repository注解詳解

作者:Mr.VK 更新時間: 2024-03-10 編程語言

@Repository和@Controller、@Service、@Component的作用差不多,都是把對象交給spring管理。

1. @Controller控制層

@Controller用于標(biāo)記在一個類上,使用它標(biāo)記的類就是一個SpringMvc Controller對象,分發(fā)處理器會掃描使用該注解的類的方法,并檢測該方法是否使用了@RequestMapping注解。
@Controller只是定義了一個控制器類,而使用@RequestMapping注解的方法才是處理請求的處理器。
@Controller標(biāo)記在一個類上還不能真正意義上說它就是SpringMvc的控制器,應(yīng)為這個時候Spring還不認(rèn)識它,這個時候需要把這個控制器交給Spring來管理。
@Controller表示在tomcat啟動的時候,把這個類作為一個控制器加載到Spring的Bean工廠,如果不加,就是一個普通的類,和Spring沒有半毛錢關(guān)系。
有兩種方式可以管理:

<!--基于注解的裝配-->
<!--方式一-->
<bean class="com.HelloWorld"/>
<!--方式二-->
<!--路徑寫到controller的上一層-->
<context:component-scan base-package="com"/>

Action層:

package com;
@Controller
public class HelloWorld{
	
	@RequestMapping(value="/showRegUser")
	public String printHello() {
		return "hello";
	}

    @Autowried
    private IocSerevce service;
    public void add(){
        service.add();
    }
}

component-scan默認(rèn)掃描的注解類型是@Component,不過,在@Component的語義基礎(chǔ)之上細(xì)化為@Reposity,@Service,@Controller.
有一個use-defaultbao’i-filters屬性,屬性默認(rèn)是true,表示會掃描抱下所有的標(biāo)有@Component的類,并注冊為bean,也就是@Component的子注解@Service,@reposity等
如果只想掃描包下的@Controller或其他內(nèi)容,則設(shè)置use-default-filters屬性為false,表示不再按照scan指定的包進(jìn)行掃描,而是按照指定包進(jìn)行掃描。

<context:component-scan base-package="com" user-default-filters="false">
    <context:include-filter type="regex" expression="com.tan.*"/>
</context:component-scan>

2. @Service()

此注注解屬于業(yè)務(wù)邏輯層,service或者manager層。
默認(rèn)按照名稱進(jìn)行裝配,如果名稱可以通過name屬性指定,如果沒有name屬性,注解寫在字段上時,默認(rèn)去字段名進(jìn)行查找,如果注解寫在setter方法上,默認(rèn)按照方法屬性名稱進(jìn)行裝配。當(dāng)找不到匹配的bean時,才按照類型進(jìn)行裝配,如果name名稱一旦指定就會按照名稱進(jìn)行裝配。

Service層:

@Service()
public class IocService{

    @Resource
    private IIocDao iiocDao;
    public void add(){
        iiocDao.add();
    }
}

3. @Repository持久層

此注解式持久層組件,用于標(biāo)注數(shù)據(jù)訪問組件,即DAO組件
DAO層
先定義一個接口:

public interface IIocDao{
    public void add();
}

然后實(shí)現(xiàn)類:

//Dao層中定義了一些接口
//表示將Dao類聲明為bean
@Repository
public class IocDao implements IIocDao{
    public void add(){
        System.out.println("調(diào)用了Dao");
    }
}

另外一種解釋: @Repository對應(yīng)數(shù)據(jù)訪問層Bean

@Repository(value="userDao")
public class UserDaoImpl extends BeansDaoImpl<User>{
    ......
}

@Repository(value=“userDao”)注解告訴Spring ,讓Spring創(chuàng)建一個名字叫做"userDao"的UserDapImpl實(shí)例。
當(dāng)Service需要使用Spring創(chuàng)建的名字叫“userDao”的UserDaoImpl實(shí)例時,就可以使用@Resource(name=“userDao”)注解告訴Spring,Spring把創(chuàng)建好的userDao注入給Service即可。

 //注入userDao,從數(shù)據(jù)庫中根據(jù)用戶Id取出指定用戶時需要用到
 @Resource(name = "userDao")
 private BaseDao<User> userDao;

原文鏈接:https://blog.csdn.net/Mr_VK/article/details/122762743

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新