• Spring @ Component 的作用


    1、@controller 控制器(注入服务) 2、@service 服务(注入dao) 3、@repository dao(实现dao访问) 4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

      @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() { } 

     

    1、@Resource的注解: 
    @Resource是J2EE的注解。意思是说在容器里面找相应的资源。也可以通过name属性指定它name的资源。可以注解到field或者setter上面 
    public class UserAction { 
        private UserService userService; 
         
        @Resource(name="userService") 
        public void setUserService(UserService userService) { 
            this.userService = userService; 
        } 
        public void addUser(){ 
            userService.HelloWorld(); 
        } 

     
     
    2、@Component 
    @Component和<context:component-scan base-package="com.spring"></context:component-scan>配合实现无XML配置,只通过注解配置及可将类放入资源容器中。 
     
    案例解析: 
    1、  xml文件:配置容器资源扫描的包 
    <?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:annotation-config/> 
        <!-- 配置容器资源扫描的包 --> 
       <context:component-scan base-package="com.spring"></context:component-scan> 
    </beans> 
     
    2、  Java文件: 
    标注资源的注解@Component。括号里面指定的是存入容器的name属性为userService 
    那么将来我们拿的时候则getBean(“userService”)即可。如果我们不指定userService它默认存入容器bean的key为userServiceImpl这样就可以得到一个装有UserServiceImpl对象的容器 
    package com.spring.service; 
    import org.springframework.stereotype.Component; 
    import com.spring.dao.UserDao; 
     
    @Component("userService") 
    public class UserServiceImpl implements UserService{ 
        private UserDao userDao; 
        public void init(){ 
            System.out.println("init"); 
        } 
        public void destory(){ 
            System.out.println("destory"); 
        } 
        public UserDao getUserDao() { 
            return userDao; 
        } 
        public void setUserDao(UserDao userDao) { 
            this.userDao = userDao; 
        } 
        public void HelloWorld(){ 
            System.out.println("helloworld"); 
        } 

     
    通过@Resource将资源注入进来 
    因为上文已经配置了容器里面的资源。所以我这里将资源通过@Resource注解将资源注入到相关的属性。请看代码: 
    @Component("userAction") 
    public class UserAction { 
        private UserService userService; 
         
        //它会将beans的xml文件配置加入进去 
        //也可以使用name属性指定byName的指定 
        @Resource(name="userService") 
        public void setUserService(UserService userService) { 
            this.userService = userService; 
        } 
        public void addUser(){ 
            userService.HelloWorld(); 
        } 

     
     
    测试实现: 
    通过上文配置的userAction案例来得到这个对象然后调用它里面的方法,因为上文通过了@ Component注解将UserAction的对象配置到了容器里面。所以获得容器之后就可以用这种方法getbean即可 
     
        @Test 
        public void test01(){ 
            BeanFactory applicationContext = new ClassPathXmlApplicationContext("beans.xml"); 
            UserAction user = (UserAction) applicationContext.getBean("userAction"); 
            user.addUser(); 
        } 
     
     
    @Scope和@PostConstruct、@PreDestroy 
     
    很简单就相当于前面讲到的作用于和initmethod和destorymethod请看下面代码。不再多说: 
    @Scope("Singleton") 
    @Component("userService") 
    public class UserServiceImpl implements UserService{ 
        private UserDao userDao; 
        @PostConstruct 
        public void init(){ 
            System.out.println("init"); 
        } 
        @PreDestroy 
        public void destory(){ 
            System.out.println("destory"); 
        } 
        public UserDao getUserDao() { 
            return userDao; 
        } 
        public void setUserDao(UserDao userDao) { 
            this.userDao = userDao; 
        } 
        public void HelloWorld(){ 
            System.out.println("helloworld"); 
        } 

  • 相关阅读:
    1、一条sql查询语句的执行过程
    go 内存分配
    GO Json
    gorm CRUD:读写数据
    go 基于切片的队列实现
    go的错误处理
    grpc
    sqlalchemy 判断字段是否存在
    定时函数
    用Python获取Linux资源信息的三种方法
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3545421.html
Copyright © 2020-2023  润新知