Spring 注解配置
之前关于bean注入的关于手写application.xml配置文件注入bean,这种方式比较麻烦,为了方便快速开发项目,我们使用 Spring 注解配置注入IOC容器。
Spring 注解配置使用的步骤:
1.在application.xml配置文件中引入名字空间:xmlns:context="http://www.springframework.org/schema/context"
<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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
2. 开启组件扫描
<!-- 添加 context 标签,开启注解扫描的范围 base-package="com.bjlemon.pojo"-->
<context:component-scan base-package="com.bjlemon.pojo"/>
3.在需要注入到IOC容器中的Bean 头上添加 注解
@Component("cc")
public class Car {
@Value("保时捷")
private String brand;
@Value("保时捷911")
private String name;
@Value("3000000")
private Double price;
}
@Component 标记此类为一个组件;Spring 在扫描是,发现此类为组件则 把它注入 到 IOC容器,注入后bean 的名字为 类名首字母 小写后的 的单词 作为bean 的名字,如果,需要自定义名字则则需要 自己定义 @Component(“beanName”);@Value: 注入属性值,基本数据类型&String
Component 是一个Bean组件通用注解,此注解没有业务上的含义,但是实际开发中,组件来自各个领域,比如 控制器 XXContrller ,业务层 XXSevice , 持久层 XXDao , 为了更加明确体现各层组件,Spring 提供了更加细化的注解
业务层:推荐 @Service
控制器:推荐 @Controller
持久层:推荐 @Repository
以上其效果和@Component是一样的,就是为了区分细化便于识别。
@Controller
public class UserController {
//@Autowired(required=true) :自动注入依赖,注入类型为byType,默认required=true,表示必须注入一个,否则报错。
@Autowired
private Car car;
}
当一个Service 接口被2个不同实现类实现 @Autowired 注入就会报错,这时 @Autowired(required=false),@Qualifier(“beanName”) 指定实现类的名称,就会注入指定名字的bean。
@Qualifier(“beanName”) : 和@Autowired 连用,变成根据名字注入也就是byName , 同时指定bean的名字。
@Controller
public class UserController {
//引入业务层
@Autowired(required=false)
@Qualifier("userServiceImpl2")
private UserService userService=null;
public boolean doGet() {
System.out.println("--调用控制层---");
userService.login("aaa","1234");
return true;
}
}
@Resource(name=“beanName”):根据名字注入,相当于以上2个注解的合用,名字注入不成功再按类型,它不是Spring提供的。JSR规范。
基于java配置 的注解(类似XML的作用)
@Configuration :基于java配置 的注解,表示该类为一个配置类,类似XML的作用。
@Bean :表示为一个java bean ,能够注册到IOC容器中。
@Configuration
public class AppConfig {
@Bean
public Car getCar() {
Car car = new Car();
return car;
}
}
//测试类
public class SpringJavaConfig {
@Test
public void test1() {
ApplicationContext ioc = new AnnotationConfigApplicationContext(AppConfig.class);
Car car = ioc.getBean( Car.class);
System.out.println(car);
}
}