> 文章列表 > Spring注解开发详解

Spring注解开发详解

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、使用Component定义bean

//dao层接口
public interface UserDao {void show();
}//dao层实现类
@Component //通过类型定义bean(只有一个实现类建议使用)
// @Component("ud") //通过id定义bean
public class UserDaoImpl implements UserDao {@Overridepublic 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 {@Overridepublic void show() {System.out.println("这是userDao的方法");}
}// 业务层
@Service
public class UserServiceImpl implements UserService {@Overridepublic void show() {System.out.println("这是userDao的方法");}
}// 表现层
@Controller
public class UserController {
}

1.4、XML与注解配置的对应关系
Spring注解开发详解

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

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

注解 说明
@Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解,作用等价于applicationContext.xml 配置文件。
@ComponentScan 用于指定 Spring在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package=“com.liming”/>一样

2.1、Java类代替Spring核心配置文件
Spring注解开发详解

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 {@Autowiredprivate UserDao userDao;@Overridepublic void show() {userDao.show();}
}

Spring注解开发详解
2.2、使用@Qualifier注解开启指定名称装配bean

//@Component
@Service
public class UserServiceImpl implements UserService {@Autowired@Qualifier("ud")private UserDao userDao;@Overridepublic void show() {userDao.show();}
}

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

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

//@Component
@Service
public class UserServiceImpl implements UserService {@Resource(name = "ud")private UserDao userDao;@Overridepublic 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.2、将独立的配置类加入核心配置

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

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

五、第三方bean依赖注入

5.1、简单类型依赖注入
Spring注解开发详解

5.1、引用类型依赖注入

Spring注解开发详解

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

六、生命周期注解

注解 说明
@PostConstruct 使用在方法上标注该方法是Bean的初始化方法
@PreDestroy 使用在方法上标注该方法是Bean的销毁方法
//@Component
@Repository
public class UserDaoImpl implements UserDao {@PostConstructpublic void init(){System.out.println("userDao被初始化了");}@Overridepublic void show() {System.out.println("这是userDao的方法");}@PreDestroypublic void destroy(){System.out.println("userDao被销毁了");}
}

七、作用范围注解

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

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

Spring注解开发详解