spring @Controller、@Service、@Repository、@Component总结

概述

@Controller、@Service、@Repository 这3个注解,是spring为了 明确 三层架构 所提出的

  • @Controller:在 控制层 的类中使用。用在web项目中,相当于增强版的servlet,接收请求,返回响应

  • @Service:在 service层 的类中使用

  • @Repository:在 dao层 的类中使用

  • @Component:上面 3 个注解都继承 @Component 注解

有些时候这 4 个注解可以混用,大部分时候 @Component、@Service、@Repository 可以混用

注意: 混用时,虽然从程序运行上看,不报错;但从分层架构上看,不合理

使用

放在类名上面,详见下面例子

共同属性

value 属性:相当于 bean 标签的 id 属性。如果不指定,默认值为 当前类名(首字母小写),即:userSrvImpl

什么时候用 @Component

当 某个类,不属于 控制层、service层、dao层,但想让spring容器来管理该类时,就可以用 @Component 注解

例子

当前为java项目,不是web项目,不能演示 @Controller,只演示最常用的 @Service、@Repository

上接: spring IoC-创建工程基于注解开发(@Service)

dao接口

public interface IUserDao {
    public void save(String username, String password);
}

dao实现类

@Repository
public class UserDao implements IUserDao {
    public UserDao(){
        System.out.println("UserDao默认构造方法!");
    }
    public void save(String username,String password){
        System.out.println("UserDao 保存 "+username+","+password+" 成功!");
    }
}

service接口

public interface IUserService {
    public void save(String username, String password);
}

service实现类

@Service
public class UserSrvImpl implements IUserService {

    public UserSrvImpl(){
        System.out.println("UserSrvImpl构造方法");
    }
    public void save(String username,String password){
        System.out.println("调用UserSrvImpl的save()方法,参数:"+username+"-"+password);
    }

}

测试

public class Main {
    public static void main(String[] args) {
        ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");

        IUserService srv=(IUserService)ac.getBean("userSrvImpl");
        IUserDao dao=(IUserDao)ac.getBean("userDao");

        System.out.println(srv);
        System.out.println(dao);
    }
}

执行结果:

UserDao默认构造方法!
UserSrvImpl构造方法
top.malaoshi.UserSrvImpl@10f8e03
top.malaoshi.UserDao@166ebe0

原文出处:/show_1IX1shXNigq.html