概述
@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