• @Component注解、@Service注解、@Repository注解、@Controller注解区别


    ---------------------------------------------------------------------------------------------------

      Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。
    在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。
    虽然目前这3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。
    所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用上述注解对分层中的类进行注释。

    @Service用于标注业务层组件 服务 (注入dao)

    @Controller用于标注控制层组件(如struts中的action)控制器(注入服务)

    @Repository用于标注数据访问组件,即DAO组件

    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

    @Component: 定义Spring管理Bean

    扩展:

    @Component扩展,被@Service注解的POJO类表示Service层实现,从而见到该注解就想到Service层实现,使用方式和@Component相同;

    @Component扩展,被@Controller注解的类表示Web层实现,从而见到该注解就想到Web层实现,使用方式和@Component相同;

    @Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。 

    下面写这个是引入component的扫描组件 
    <context:component-scan base-package=”com.mmnc”>    
    
    其中base-package为需要扫描的包(含所有子包) 
           1、@Service用于标注业务层组件 
           2、@Controller用于标注控制层组件(如struts中的action) 
           3、@Repository用于标注数据访问组件,即DAO组件. 
           4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。    
               @Service 
               public class UserServiceImpl implements UserService { } 
               @Repository 
               public class UserDaoImpl implements UserDao { } getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“***”)       
                       这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”) 
               @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意): @PostConstruct public void init() { } 
    

      

    Spring2.5为我们引入了组件自动扫描机制,他在类路径下寻找标注了上述注解的类,并把这些类纳入进spring容器中管理。
    它的作用和在xml文件中使用bean节点配置组件时一样的。要使用自动扫描机制,我们需要打开以下配置信息:

    代码

    <?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:component-scan base-package=”com.eric.spring”>   
    </beans> 
    

      

    getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“aaaaa”)这样来指定。
    这种bean默认是“singleton”的,如果想改变,可以使用@Scope(“prototype”)来改变。

    可以使用以下方式指定初始化方法和销毁方法:

    @PostConstruct
    public void init() { 
    } 
    @PreDestroy
    public void destory() { 
    } 
    

      

    注入方式:

    把DAO实现类注入到action的service接口(注意不要是service的实现类)中,注入时不要new 这个注入的类,因为spring会自动注入,如果手动再new的话会出现错误,
    然后属性加上@Autowired后不需要getter()和setter()方法,Spring也会自动注入。  

    在接口前面标上@Autowired注释使得接口可以被容器注入,如:

    @Autowired
    @Qualifier("chinese")
    private Man man; 
    

      

  • 相关阅读:
    python命令方式和关键字
    python注释及语句分类
    基于物联网的智能垃圾桶设计
    基于51单片机的交通灯控制设计
    python安装以及版本检测
    python简介
    关于deepin系统安装design compiler的问题解答
    关于安装deepin+window10双系统有时没有声音的问题
    如何使用notepad运行python程序
    15 一个完整的链式队列代码
  • 原文地址:https://www.cnblogs.com/951106Nancy/p/9541677.html
Copyright © 2020-2023  润新知