标签:
特定组件包括:
@Component: 基本注解, 标识了一个受 Spring 管理的组件
@Respository: 标识持久层组件
@Service: 标识服务层(业务层)组件
@Controller: 标识表现层组件
上面的组件可以混用,因为IOC容器并无法区分当前类是否为业务、持久、还是表现层。
对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称
使用注解配置Bean前,我们需要引入spring-aop-4.1.7.RELEASE.jar包,否则会报异常。
我们先来通过注解创建几个Bean
组件类
@Component
public class Test {
}
Controllor类
@org.springframework.stereotype.Controller
public class Controller {
}
Service类
@org.springframework.stereotype.Service
public class Service {
}
Repository类
@Repository
public class Respository {
}
我们来看下,工程目录
配置IOC容器
<context:component-scan base-package="com.gp.spring.annotation"></context:component-scan>
指定我们要扫描的包,spring会为我们自动扫描此包及当前包的子包。
测试
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring_annotation.xml");
Test t = (Test) context.getBean("test");
System.out.println(t);
Controller c = (Controller) context.getBean("controller");
System.out.println(c);
Service s = (Service) context.getBean("service");
System.out.println(s);
Respository r = (Respository) context.getBean("respository");
System.out.println(r);
}
输出结果
com.gp.spring.annotation.Test@bddc6
com.gp.spring.annotation.controller.Controller@10cf230
com.gp.spring.annotation.service.Service@f032fa
com.gp.spring.annotation.respository.Respository@1a2fc31
成功完成注解配置Bean。
我们有过spring基础的同学都知道,spring为我们省去了new 的操作,而是通过IOC容器为我们new 一个目标对象,之前是通过xml配置的,现在我们通过注解的方式,来演示这个配置。
下面主要介绍以下几个注解
@Autowired
@Qualifier
下面我们来看看代码
工程目录结构
Controller代码
public class Controller {
@Autowired
@Qualifier("animalServiceImpl")
public UserService service;
public void execute(){
System.out.println("Controller class execute method");
service.save();
}
}
代码中,我们定义了public UserService service;然后通过@Autowired注入实现类
@Qualifier(“animalServiceImpl”),使用此注解指定在同一接口多个实现类情况下,要调用的目标实现类
Service接口
public interface UserService {
public void save();
}
UserServiceImpl实现类
@Service
public class UserServiceImpl implements UserService {
@Autowired
private Respository respository;
public void save() {
System.out.println("service class save method");
respository.save();
}
}
AnimalServiceImpl实现类
@Service
public class AnimalServiceImpl implements UserService {
@Autowired
private Respository respository;
@Override
public void save() {
respository.save();
System.out.println("AnimalServiceImpl class save method");
}
}
Respository持久化类
@Repository
public class Respository {
public void save(){
System.out.println("Respository class save method");
}
}
测试方法
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring_annotation.xml");
Controller c = (Controller) context.getBean("controller");
c.execute();
}
}
输出结果
Controller class execute method
Respository class save method
AnimalServiceImpl class save method
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/gaopeng0071/article/details/47044789