Spring 配置扩展

目录

一、拆分Spring配置文件 🌹

   为什么要拆分Spring配置文件?

​编辑

二、自动装配 🍬

什么是自动装配?

手动装配

自动装配


一、拆分Spring配置文件 🌹

   为什么要拆分Spring配置文件?

         在实际应用里,随着应用规模的增加,系统中 Bean 数量也大量增加,导致配置文件非常庞大。为了避免这种情况的产生,提高配置文件的可读性与可维护性,可以将Spring 配置文件分解成多个配置文件。

拆分前:所有配置信息都在同一个配置文件中。

 按层拆分:不同层分别创建配置文件。

  •  dao层就放跟dao层相关的配置
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           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
                               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
                               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd    ">
    
        <!-- 1、引入 properties 配置文件 -->
        <context:property-placeholder location="database.properties" />
    
        <!-- 2、配置数据源 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${driver}" />
            <property name="url" value="${url}"  />
            <property name="username" value="${name}" />
            <property name="password" value="${pwd}" />
        </bean>
    
        <!-- 3、创建SqlSessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 绑定数据源 -->
            <property name="dataSource" ref="dataSource" />
            <!-- 指定Mybatis配置文件路径 -->
            <property name="configLocation" value="mybatis-config.xml" />
        </bean>
    
        <!-- 4、MapperScannerConfig  将指定包下的 Mapper 接口注册到 Spring 容器中。 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.cskt.mapper" />
        </bean>
    </beans>
  •  service放service层相关的配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           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
                               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
                               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd    ">
        <!-- 5、注解实现依赖注入 -->
        <context:component-scan base-package="com.cskt.service" />
    </beans>

二、自动装配 🍬

什么是自动装配?

       自动装配就是会通过Spring的上下文为你找出相应依赖项的类,通俗的说就是Spring会在上下文中自动查找,并自动给Bean装配与其相关的属性!

spring中实现自动装配的方式有两种,一种是通过xml文件、一种是通过注解的方式。

手动装配

讲自动装配之前,我们先来说一下手动装配,手动装配又是什么?手动装配就是通过xml配置自己将bean中所关联的其他bean装配进去。用代码表示:

package com.cskt.service.impl;

import com.cskt.domain.User;
import com.cskt.mapper.UserMapper;
import com.cskt.service.UserService;

public class UserServiceImpl implements UserService {
    
    //实例化所依赖的SysUserMapper对象
    //重复的new对象  构造注入  就是解决Service 和 dao 的问题
    private UserMapper userMapper;

    //添加构造函数
    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public int insert(User sysUser) {
        int count = userMapper.insert(sysUser);
        return count;
    }
}
<!-- 构造注入 1、先把dooImpl 注入进来  2、在service 写一个构造函数依赖注入 -->
<bean id="userMapper" class="com.cskt.mapper.impl.UserMapperImpl"></bean>
<bean id="userService" class="com.cskt.service.impl.UserServiceImpl">
	<constructor-arg ref="userMapper"></constructor-arg>
</bean>

在id=userService的bean中,我们给userService手动装配了与之相关联的userMapper,这就叫做手动装配。

注:那么有没有什么办法,我们可以不用去手动装配关联的bean,让spring帮我们自动把关联的bean装配进去呢?答案是肯定的。自动装配就可以帮助我们解决这个问题。实现自动装配有两种方式,一种是使用注解的方式、另一种是通过xml文件的方式。下面我们俩讲实现自动装配的两种方式。

自动装配

  • 通过xml文件实现自动装配

  我们只需要在xml配置文件中的bean标签中加入一个属性autowire即可,例如:

<bean id="userService"
	class="cn.cvs.service.sysUser.SysUserServiceImpl" 	autowire="byName" />

使用autowire关键字声明bean的自动装配方式。其可选值为byName、byType、constructor,default,no;

Spring提供的4种自动装配类型

属性说明
no不使用自动装配。Bean的依赖关系必须通过property元素定义
byType根据属性类型自动装配
byName根据属性名自动装配
constructor与byType的方式类似,不同之处在它应用于构造器参数

  • 通过注解实现自动装配
package com.cskt.mapper.impl;

import com.cskt.domain.User;
import com.cskt.mapper.UserMapper;
import org.springframework.stereotype.Repository;

@Repository //等效于  <bean id="userMapper" class="com.cskt.mapper.impl.UserMapperImpl" />
            //如果变量名规范的话就可以不用加括号  ("userMapper") 
public class UserMapperImpl implements UserMapper {
    @Override
    public int insert(User sysUser) {
        //这里未实现完整的数据库操作,仅为说明原因
        System.out.println("执行了新增的方法。。。。");
        return 0;
    }
}
package com.cskt.service.impl;

import com.cskt.domain.User;
import com.cskt.mapper.UserMapper;
import com.cskt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service("userService")   /*等效于  <bean id="userService" class="com.cskt.service.impl.UserServiceImpl">
                                        <constructor-arg ref="userMapper"></constructor-arg>
                                   </bean> */
public class UserServiceImpl implements UserService {

    //实例化所依赖的SysUserMapper对象
    //重复的new对象  构造注入  就是解决Service 和 dao 的问题

    @Autowired //自动装配  只要命名规范 就会自动装配
    //@Qualifier("userMapper")  //如果获取不到,  如果指定装配哪一个
    private UserMapper userMapper;

    @Override
    public int insert(User sysUser) {
        int count = userMapper.insert(sysUser);
        return count;
    }
}
  <!-- 扫描包中注解标注的类,如果不加的话会导致注入不进去 -->
<context:component-scan base-package="com.cskt.mapper,com.cskt.service" />

     使用注解呢,就不需要我们手动去编写配置文件了。它会自动给我们生成一个bean,只需要配置我们的扫描仪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值