准备
1、要使用注解方式配置 IoC,除了之前引入的基础 jar 包,还需要引入 spring-aop 支持包,如下:

2、在 applicationContext.xml 中引入 context 约束:
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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">
    <!--配置文件约束在 spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html 下可以找到-->
</beans>
简单使用
1、创建测试 Dao 接口:
// com.zze.dao.UserDao
package com.zze.dao;
public interface UserDao {
    void save();
}
2、创建 Dao 接口的实现类并使用注入注解:
// com.zze.dao.impl.UserDaoImpl
package com.zze.dao.impl;
import com.zze.dao.UserDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * 实例化当前类并将其交给 Spring 管理
 * 相当于在配置文件中配置 <bean id="userDao" class="com.zze.dao.impl.UserDaoImpl"/>
 */
@Component("userDao")
public class UserDaoImpl implements UserDao {
    /*
    给属性注入值
     */
    @Value("张三")
    private String name;
    /*
    如果提供了 set 方法,则可在 set 方法上加上注解
     */
//    @Value("张三")
//    public void setName(String name) {
//        this.name = name;
//    }
    @Override
    public void save() {
        System.out.println("from UserDaoImpl.save()" + name);
    }
}
3、配置注解扫描包:
<!-- applicationContext.xml -->
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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">
    <!--使用 IoC 注解开发,配置注解扫描的包(哪些包下使用了 IoC 注解)-->
    <context:component-scan base-package="com.zze.dao"/>
</beans>
4、测试使用:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
常用注解
Spring 提供的常用基础注解大致可以分为如下几类:
注册 Bean 到容器
- @Component:修饰一个类,将这个类实例交给 Spring 管理。
- @Controller:- @Component的衍生注解,功能与之相同,用来修饰 Web(显示)层的类。
- @Service:- @Component的衍生注解,功能与之相同,用来修饰 Service(服务)层的类。
- @Repository:- @Component的衍生注解,功能与之相同,用来修饰 Dao(持久)层的类。
属性注入
- @Value:给基本类型属性注入值。
- @Autowried:默认是按照类型在 IoC 容器中找到对应的实例注入。如果想按照名称匹配完成属性注入,可以同时再使用一个注解- @Qualifier来指定要注入对象的名称。
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Resource:可以看做是 @Autowried 和 @Qualifier 注解的结合体。默认不指定 name 属性时是根据对象类型匹配完成属性注入,指定了 name 属性时则会按照 name 值在 IoC 容器找到指定 name 的实例注入。
@Resource(name = "userDao")
private UserDao userDao;
生命周期
- @PostConstruct:修饰一个方法,让其在实例化时执行,相当于在- bean标签中指定- init-method。
- @PreDestroy:修饰一个方法,让其在实例销毁之前执行,相当于在- bean标签中指定- destroy-method。
作用范围
- @Scope:修饰一个类,指定其作用范围。
value 有如下几个可选值:
- singleton:默认值,Spring 会采用单例模式创建这个对象。
- prototype:多例的。
- request:应用在 web 项目中,Spring 创建这个类对象后,将这个对象存放到- request范围中。
- session:应用在 web 项目中,Spring 创建这个类对象后,将这个对象存放到- session范围中。
- globalsession:应用在 web 项目中,必须在 porlet 环境下使用。
IoC 的 XML 和注解配置对比
- XML 方式:结构清晰,维护方便,适用于任意场景。
- 注解方式:简易开发,当一个类不是自己编写而是由第三方提供时,不可以使用。
-de8bd8f33c3e44a59907dafe1884f228.png) 
       
       
         
       
          
评论区