Spring的注解开发,改变了传统的编程方式,目的都是IOC,即将类的创建和赋值的权利转交给Spring,我们可以用注解来代替前面所配置的xml的各种操作,十分的方便
1、Spring_注解IOC的配置:
- 导包:Spring注解IOC所用的jar包
- 配置xml(前面的内容已经和配置Bean的不同了,这是配置注解的,但是也包含了Bean的配置,两者都可以用)
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd"> <!-- bean definitions here -->
<!-- 这是spring-context的约束,里面也包含了Bean的约束 -->
<!-- 使用Bean来做xml配置 -->
<!-- <bean id="test01" class="cn.nupt.demo01.UserDao.UserDaoImpl.UserDaoImpl"></bean> -->
Spring的IOC注解的配置====================================================
1、开启组件扫描(哪些包下的类需要使用IOC注解)
<context:component-scan base-package="cn.nupt.demo01.UserDao"></context:component-scan>
2、没有扫描的时候,打开(xml和注解整合开发,xml配置类,注解注入属性)
<context:annotation-config></context:annotation-config>
- 在我们创建的类里面写注释
- 在需要注释的类上加:@Component(“test02”)【相当于xml里面的 id=“test02” class=“类的全路径”】
- 在属性上加:@Value(“吴彦祖”)【相当于xml里面的注入属性】
如果有set方法,就把注解写到set方法上面
如果没有set方法,就把注解写道属性上面
具体的代码展示如下:
package cn.nupt.demo01.UserDao.UserDaoImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import cn.nupt.demo01.UserDao.UserDao;
@Component("test02")//相当于在xml里面配置了<bean id="test02" class="cn.nupt.demo01.UserDao.UserDaoImpl.UserDaoImpl"></bean>
public class UserDaoImpl implements UserDao{
@Value("吴彦祖")
private String name;
private int age;
@Value("23")
public void setAge(int age) {
this.age = age;
}
public void save() {
System.out.println("Dao中sava方法的实现。");
System.out.println(name + ":" + age);
}
}
- 编写测试类
@Test
public void test03() {
// IOC注解的方式
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) context.getBean("test02");
userDao.save();
}
输出:
Dao中sava方法的实现。
吴彦祖:23
2、常用注解总结:
-
修饰类的注解:@Component
这个注解有三个衍生注解,功能类似,方便分组开发- @Controller:web层
- @Service :service层
- @Repsitort:Dao层
-
属性注入注解
- @Value:设置普通属性的值
- @Resource:对象类型,按照名称注入
-
生命周期相关
- @PostConstruct:初始化方法(默认执行)
- @PreDestroy:销毁方法(在ApplicationContext接口实现类销毁的时候执行)
-
Bean作用范围的注解(也是修饰类的): @Scope
- singleton单例(默认)
- prototype多例
- 等等(具体见前一篇博文)
3、xml和注解的区别:
xml:可以适用任何场景,结构清晰,后期维护方便
注解:有些地方用不了,比如这个类不是自己提供的,开发方便,但是需要看源代码