一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情。
- 📝 个人主页:程序员阿红🔥
- 🎉 支持我:点赞👍收藏⭐️留言📝
- 🍓欢迎大家关注哦,互相学习🍓
- 🍋欢迎大家访问哦,互相学习🍋
- 🍑欢迎大家收藏哦,互相学习🍑
I.Spring配置文件模块化
实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,也就是所谓的配置文件模块化。
(1)并列的多个配置文件
ApplicationContext act = new
ClassPathXmlApplicationContext("beans1.xml","beans2.xml","...");
(2)主从配置文件
<import resource="calsspath:applicationContext-xxx.xml"/>
注意:
- 同一个xml中不能出现相同名称的bean,如果出现会报错
- 多个xml如果出现相同名称的bean,不会报错,但是后加载的会覆盖前加载的bean
II.学习Spring的注解开发
Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
1.Spring常用注解
Spring常用注解主要是替代的配置
说明:
JDK11以后完全移除了javax扩展导致不能使用@resource注解
需要maven引入依赖
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
<!--注解的组件扫描-->
<context:component-scan base-package="com.lagou"></context:component-scan>
2.bean实例化(IOC)
<bean id="userDao" class="com.lagou.dao.impl.UserDaoImpl"></bean>
-
使用@Compont或@Repository标识UserDaoImpl需要Spring进行实例化。
// @Component(value = "userDao") @Repository // 如果没有写value属性值,Bean的id为:类名首字母小写 public class UserDaoImpl implements UserDao { }
3.属性依赖注入(DI)
<bean id="userService" class="com.lagou.service.impl.UserServiceImpl">
<property name="userDao" ref="userDaoImpl"/>
</bean>
- 使用@Autowired或者@Autowired+@Qulifier或者@Resource进行userDao的注入
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
// <property name="userDao" ref="userDaoImpl"/>
// @Autowired
// @Qualifier("userDaoImpl")
// @Resource(name = "userDaoImpl")
例子:
-
两个持久层都实现了AccountDao接口,
ACCountDaoImp implements AccountDao
ACCountDaoImp2 implements AccountDao
-
利用@Autowired依赖注入AccountDao对象aDao时,会找到两个bean对象(图二配置),会报错如图三所示。
-
解决办法:
-
利用@Aualifier("accountDao")指定依赖注入的对象。
-
@Aualifier注解必须和@Autowired一起使用
- @Resource等价于@Aualifier和@Autowired,所以也可以使用@Resource(name="accountDao")来依赖注入。
图一
-
图二
图三
4.@Value的使用
- 使用@Value进行字符串的注入,结合spring的EL表达式获得配置参数
5.@Scope的使用
<bean scope=""/>
使用@Scope标注Bean的范围
@Service
@Scope("singleton")
public class UserServiceImpl implements UserService {{
}
6.Bean生命周期
<bean init-method="init" destroy-method="destory" />
- 使用@PostConstruct标注初始化方法,使用@PreDestroy标注销毁方法
@PostConstruct
public void init(){
System.out.println("初始化方法....");
}
@PreDestroy
public void destroy(){
System.out.println("销毁方法.....");
}
💖💖💖 完结撒花
💖💖💖 路漫漫其修远兮,吾将上下而求索
💖💖💖 写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
最后,还不收藏进你的收藏夹吃灰😎😎😎