Spring注解开发详解

学习基于注解的 IOC 配置,大家脑海里首先得有一个认知,即注解配置和 xml 配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 , 所以这两种配置方式我们都需要掌握。

一、注解开发定义bean

注解 说明
@Component 使用在类上用于实例化Bean
@Controller 使用在web层类上用于实例化Bean
@Service 使用在service层类上用于实例化Bean
@Repository 使用在dao层类上用于实例化Bean

1、Spring 2.5版本

注意:
在2.5版本中使用注解进行开发时,需要在application.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
Spring注解开发详解_第1张图片

1.1、使用Component定义bean

//dao层接口
public interface UserDao {
    void show();
}

//dao层实现类
@Component //通过类型定义bean(只有一个实现类建议使用)
// @Component("ud") //通过id定义bean
public class UserDaoImpl implements UserDao {
    @Override
    public void show() {
        System.out.println("这是userDao的方法");
    }
}

1.2、核心配置文件中通过组件扫描加载bean

<context:component-scan base-package="com.liming"/>

1.3、Spring提供@Component注解的三个衍生注解

// 持久层
@Repository
public class UserDaoImpl implements UserDao {
    @Override
    public void show() {
        System.out.println("这是userDao的方法");
    }
}

// 业务层
@Service
public class UserServiceImpl implements UserService {
    @Override
    public void show() {
        System.out.println("这是userDao的方法");
    }
}

// 表现层
@Controller
public class UserController {
}

1.4、XML与注解配置的对应关系
Spring注解开发详解_第2张图片

2、纯注解开发(Spring 3.0版本)

Spring 3.0 开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道

注解 说明
@Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解,作用等价于applicationContext.xml 配置文件。
@ComponentScan 用于指定 Spring在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 一样

2.1、Java类代替Spring核心配置文件
Spring注解开发详解_第3张图片

2.2、初始化容器对象

读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

二、依赖注入

注解 说明
@Value 注入简单类型
@Autowired 自动按照类型注入。当使用注解注入属性时,set 方法可以省略。它只能注入其他 bean 类型。当有多个类型匹配时,使用要注入的对象变量名称作为 bean 的 id,在 spring 容器查找,找到了也可以注入成功。找不到就报错。 如果IOC容器当中有多个接口得实现类, 首先根据类型自动装配, 然后再根据名称自动装配。
@Qualifier 结合@Autowired一起使用用于根据名称进行依赖注入
@Resource 相当于@Autowired+@Qualifier,按照名称进行注入,是java提供的,不是框架提供的

2.1、使用@Autowired注解开启自动装配模式(按类型)

//@Component
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void show() {
        userDao.show();
    }
}

在这里插入图片描述
2.2、使用@Qualifier注解开启指定名称装配bean

//@Component
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    @Qualifier("ud")
    private UserDao userDao;

    @Override
    public void show() {
        userDao.show();
    }
}

注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用

2.3、使用@Resource注解开启指定名称装配bean

//@Component
@Service
public class UserServiceImpl implements UserService {

    @Resource(name = "ud")
    private UserDao userDao;

    @Override
    public void show() {
        userDao.show();
    }
}

2.4、使用@Value注解注入普通类型

@Repository
public class UserDaoImpl implements UserDao {
    @Value("字符串")
    private String str;
    public void addUser() {
        System.out.println(str);
    }
}

三、加载properties文件

注解 说明
@PropertySource 用于加载xxx.properties 文件中的配置 结合@Value(“${}”) 取配置文件的值。
@Configuration
@ComponentScan("com.liming")
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {
}

注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

四、第三方bean管理

4.1、使用独立的配置类管理第三方bean

Spring注解开发详解_第4张图片

4.2、将独立的配置类加入核心配置

注解 说明
@Import 用于导入其他配置类

Spring注解开发详解_第5张图片
注意:此注解只能添加一次,多个数据请用数组格式

五、第三方bean依赖注入

5.1、简单类型依赖注入
Spring注解开发详解_第6张图片

5.1、引用类型依赖注入

Spring注解开发详解_第7张图片

注意:引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

六、生命周期注解

注解 说明
@PostConstruct 使用在方法上标注该方法是Bean的初始化方法
@PreDestroy 使用在方法上标注该方法是Bean的销毁方法
//@Component
@Repository
public class UserDaoImpl implements UserDao {

    @PostConstruct
    public void init(){
        System.out.println("userDao被初始化了");
    }

    @Override
    public void show() {
        System.out.println("这是userDao的方法");
    }

    @PreDestroy
    public void destroy(){
        System.out.println("userDao被销毁了");
    }
}

七、作用范围注解

注解 说明
@Scope 标注Bean的作用范围,scope取值singleton prototype request session globalsession

总结(XML配置对比注解配置)

Spring注解开发详解_第8张图片

你可能感兴趣的:(Spring,spring,java,后端)