Spring学习笔记(三)—— 使用注解配置spring
一、使用步骤
1.1 导包
1.2 为主配置文件引入新的命名空间(约束)
在applicationContext.xml中引入context约束
1.3 编写相关的类
public class UserDaoImpl implements UserDao { @Override public void sayHello() { System.out.println("Hello Spring..."); } }
1.4 配置注解扫描
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <!-- 指定扫描cn.itcast.dao包下的所有类中的注解. 注意:扫描包时,会扫描指定包下的所有子孙包 --> <context:component-scan base-package="cn.itcast.dao"></context:component-scan> </beans>
1.5 在相关类上添加注解
@Component(value="userDao") public class UserDaoImpl implements UserDao { @Override public void sayHello() { System.out.println("Hello Spring..."); } }
1.6 编写测试方法
@Test public void demo1() throws Exception { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.sayHello(); }
二、Bean管理中常用的注解
2.1 @Component组件
该组件作用在类上,spring还提供了@Component的三个衍生注解(功能目前来讲是一致的)
- @Controller :WEB层
- @Service :业务层
- @Repository :持久层
这三个注解是为了让标注类本身的用途清晰。
/** * 将对象注册到容器中 */ @Repository("userDao") // @Component(value="userDao") // @Component("userDao")就相当于在xml中配置<bean name="userDao" class="cn.itcast.dao.impl.UserDaoImpl") public class UserDaoImpl implements UserDao {
2.2 属性注入的注解
【值类型注入】@Value
- 方式1:通过反射的Field赋值(破坏了封装性)
@Value("18") private Integer age;
- 方式2:通过set方法赋值
@Value("lisi") public void setName(String name) { this.name = name; }
【引用类型注入】
// @Autowired // 问题:如果匹配多个类型一致的对象,将无法选择具体注入哪一个对象 // @Qualifier("car2") //使用@Qualifier注解告诉spring容器自动装配哪个名称的对象 @Resource(name="car") private Car car;
- @Autowired:自动装配,默认按类型进行装配
- @Qualifier:强制使用名称注入
- @Resource:手动注入,指定注入哪个名称的对象,相当于@Autowired和@Qualifier一起用
2.3 Bean的作用范围注解@Scope
@Scope(scopeName="singleton")
- singleton:单例
- prototype:多例
2.4 Bean的生命周期配置
- @PostConstruct:在对象被创建后调用,相当于init-method
- @PreDestroy:在销毁之前调用,相当于destory-method
三、Bean管理的方式对比
XML和注解:
-
- XML:结构清晰
- 注解:开发方便(属性注入)