05.Spring的配置文件模块化及注解开发

143 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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常用注解主要是替代的配置

image-20220302211049652

说明:

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对象(图二配置),会报错如图三所示。

  • 解决办法:

    1. 利用@Aualifier("accountDao")指定依赖注入的对象。

    • @Aualifier注解必须和@Autowired一起使用

    1. @Resource等价于@Aualifier和@Autowired,所以也可以使用@Resource(name="accountDao")来依赖注入。

    image-20220302212746879

    图一

image-20220302211955587

图二

image-20220302211742869

图三

4.@Value的使用

  • 使用@Value进行字符串的注入,结合spring的EL表达式获得配置参数

image-20220302213341896

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("销毁方法.....");
}

💖💖💖 完结撒花

💖💖💖 路漫漫其修远兮,吾将上下而求索

💖💖💖 写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

最后,还不收藏进你的收藏夹吃灰😎😎😎