Spring @Component,@Service,@Repository和@Controller注释

时间:2020-02-23 14:35:50  来源:igfitidea点击:

我们已经看到了@autowired注释,但我们使用XML配置将Bean配置为配置bean并将其注入容器,但如果使用@component,@service,@repository和@controller注释和启用组件自动扫描,则Spring将自动将这些bean导入容器,我们不必在XML文件中显式定义它们。

所以基本上所有4个注释都用于使用Spring的应用程序上下文注册Bean定义。

@Component:

@Component是Bean定义和应用程序上下文的寄存器的通用注释。

@Service :

@Service是专门的组件注释,用于注释属于服务层的类。

@Repository:

@Repository注释是专门的组件注释,用于在DAO层注释类。
它还使得未选中的异常有资格转换为Spring DataAccessException。

@Controller :

@clersion注释是专门的组件注释,用于在演示层注释类。
它广泛用于Spring MVC应用中。

You should not use @Component annotation unless you are sure that it does not belong to @Service, @Repository and @Controller annotation.

启用组件扫描:

所有这些注释只有在使用上下文时才工作:ApplicationContext.xml中的组件扫描。
它基本上扫描以上4个注释类和注册BEAS,具有Spring应用程序上下文。

<context:component-scan base-package="org.igi.theitroad" 

Spring注释示例:

在此示例中,我们将使用上述注释使用控制器,服务和DAO类的帮助来创建国家对象。
允许首先创建我们的bean类country.java

package org.igi.theitroad.bean;
 
public class Country{
 
 String countryName; 
 long population;
 
 public Country() {
  super();
 }
 public Country(String countryName,long population) {
  super();
  this.countryName = countryName;
  this.population=population;
 }
 
 public String getCountryName() {
  return countryName;
 }
 public void setCountryName(String countryName) {
  this.countryName = countryName;
 }
 public long getPopulation() {
  return population;
 }
 public void setPopulation(long population) {
  this.population = population;
 } 
 
}

CountryController,Java.

package org.igi.theitroad.controller;
 
import org.igi.theitroad.bean.Country;
import org.igi.theitroad.service.CountryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
 
@Controller ("countryController")
public class CountryController 
{
     @Autowired
    CountryService countryService;
     
    public Country createNewCountry()
    {
        return countryService.createNewCountry();
    }
}

Countryservice.java.

package org.igi.theitroad.service;
 
import org.igi.theitroad.bean.Country;
import org.igi.theitroad.dao.CountryDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service("countryService")
public class CountryService {
    @Autowired
 CountryDAO countryDAO;
 public Country createNewCountry() {
 
  return countryDAO.createNewCountry();
 }
 
}

countrydao.java.

package org.igi.theitroad.dao;
 
import org.igi.theitroad.bean.Country;
import org.springframework.stereotype.Repository;
 
@Repository("countryDAO")
public class CountryDAO {
 
 public Country createNewCountry() {
  //You should get it from database
  Country country = new Country("Ïndia", 40000);
  return country;
 }
 
}

applicationcontext.xml.

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc" 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-3.0.xsd http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="org.igi.theitroad" 
</beans>

SpringApplicationMain.java.

package org.igi.theitroad.main;
 
import org.igi.theitroad.bean.Country;
import org.igi.theitroad.controller.CountryController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class SpringApplicationMain {
 public static void main(String[] args) {
  
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  CountryController controller = (CountryController) context.getBean("countryController");
  Country country = controller.createNewCountry();
  System.out.println("Country Name : " + country.getCountryName());
  System.out.println("Country's Population : " + country.getPopulation());
 }
}

运行上面的程序时,我们将得到以下输出:

Aug 08, 2015 12:00:42 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1c2709da: startup date [Mon Aug 08 00:00:42 IST 2015]; root of context hierarchy
Aug 08, 2015 12:00:42 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
Country Name : Ïndia
Country's Population : 40000