Spring快速复习--配置文件(一)

99 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

Spring的配置文件

Bean 标签基本配置

使用Spring来创建对象,每一个对象在Spring中都被称为bean,这句是重点

  • 用来配置对象交由 Spring 来创建
  • 默认情况下它( Spring ) 调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功

基本属性:

id:Bean 实例在 Spring 容器中的唯一标识 

class:Bean 的 全限定名称 / 全包名

Bean 标签范围配置

  • scope:指对象的作用范围,取值如下:

取值范围 说明

singleton 单例的

prototype 原型模式

默认情况的话就是属于单例模式

下面看图例

image-20220608183428620

为什么bean默认为单例

为了提高效率!

比如你每次调用dao对象执行里面的方法,dao对象我们需要每次都重新创建吗?不需要,因为都是同一个对象只是每次调用对象里不同的方法罢了,所以Sping里的bean默认都是单例的。

那么哪些bean适合交给ioc容器管理呢?

  • 表现层对象
  • 业务层对象
  • 数据层对象
  • 工具类对象

因为这些以上对象可以重复利用,交给ioc可以提高效率

不适合交给容器进行管理的bean

  • 封装实体的域对象 每个实体对应数据库一条数据,这个自然是不能交给ioc来管理的

Bean 生命周期配置

**字如其名,就是英译汉过来的意思 **

  • init-method:指定类中的初始化方法名称
  • destory-method:指定类中销毁方法名称

在要注入的bean中,可以写bean的初始化方法和销毁方法

在spring的配置文件中进行指定

下面看图例

image-20220609103150537

image-20220609103249802

Bean 实例化的三种方式

无参构造方法实例化

public class UserDaoImpl implements UserDao {
    public UserDaoImpl(){
        System.out.println("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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
</beans>
     
        
public class UserDaoDemo {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("application.xml");
        UserDao userDao = (UserDao) app.getBean("getUserDao");
        userDao.save();
    }
}
​
​
通过无参构造函数实例化对象

工厂静态方法实例化

image-20220609104227794

public class UserDaoImpl implements UserDao {
    public UserDaoImpl(){
        System.out.println("Dao ------ 无参构造方法......");
    }
}
​
​
<!--    getUserDao在StaticFactory中是静态方法,所以可以直接获取-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
    <bean id="getUserDao" class="com.heima.factory.StaticFactory" factory-method="getUserDao">
​
    </bean>
     
        
public class UserDaoDemo {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("application.xml");
        UserDao userDao = (UserDao) app.getBean("getUserDao");
        userDao.save();
    }
}
​
​
通过无参构造函数实例化对象
save running.......

工厂实例方法实例化

public class StaticFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}
​
public class UserDaoImpl implements UserDao {
    public UserDaoImpl(){
        System.out.println("Dao ------ 无参构造方法......");
    }
}
​
​
<!--    getUserDao在StaticFactory中是静态方法,所以可以直接获取-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
           
<!--动态Bean工厂需先配置 动态工厂,再根据动态工厂名指定工厂需执行的方法-->
<bean id="getUserDao" class="com.heima.factory.StaticFactory"/>
<bean id="getUserDaoBean" factory-bean="getUserDao" factory-method="getUserDao"/>
     
        
    
public class UserDaoDemo {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("application.xml");
        //这里获取的bean为getUserDaoBean
        UserDao userDao = (UserDao) app.getBean("getUserDaoBean");
        userDao.save();
    }
}
​
​
通过无参构造函数实例化对象
save running.......
​
​

Spring 的重点配置

id 属性:在容器中 Bean 实例的唯一标识,不允许重复

class 属性:要实例化的 Bean 的全限定名

scope 属性:Bean 的作用范围,常用是 singleton(单例模式)和 prototype(原型模式/多例模式)

<property> 标签:属性注入

name 属性:属性名称

value 属性:注入的普通属性值

ef 属性:注入的对象引用值

<constructor-arg>有参结构体 set 注入 标签      

<constructor-arg name="userDao" ref="set 方法 - set 转 小驼峰"></constructor-arg>

<import>标签:导入其他的 Spring 的分文件 如下,导入一个xml文件:

<import resource="applicationContext-user.xml"></import>

对应的实例,都放到一张图上了,需要的可以自取。到后面其实还是用注解为多配置文件形式了解即可。

image-20220610182651010

image-20220610182709538