其他分享
首页 > 其他分享> > Spring配置文件

Spring配置文件

作者:互联网

在这里插入图片描述

Spring配置文件

bean标签的基本配置

基本属性

id 不允许重复

class

<bean id="userDao" class="com.itheima.dao.impl.UserDaoimpl"></bean>

bean范围配置

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

singleton :默认值单例的

bean生命周期

对象创建:当应用加载,创建容器时,对象就被创建

对象运行:只要容器在,对象一直活着

对象销毁:当应用卸载,容器销毁时对象就被销毁

prototype:多例的

bean生命周期

对象创建:当使用对象时,创建新的对象实例

对象运行:只要对象在使用中,就一直活着

对象销毁:当对象时间不用时,被java的垃圾回收器回收了

request:WEB项目中,Spring创建一个bean对象,将对象存入到request域中

session:WEB项目中,Spring创建一个bean对象将对象存入到session域中

global session:WEB项目中,应用于prolet环境,如果没有prolet环境那么globalSession相当于session

<?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" scope="singleton"></bean>
</beans>


package com.itheima.test;

import com.itheima.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
    @Test
    public  void test1(){
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        UserDao userDao1 = (UserDao) app.getBean("userDao");
        System.out.println(userDao);
        System.out.println(userDao1);
    }
}

结果:
com.itheima.dao.impl.UserDaoimpl@67f639d3
com.itheima.dao.impl.UserDaoimpl@67f639d3
<?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" scope="prototype"></bean>
</beans>

package com.itheima.test;

import com.itheima.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
    @Test
    public  void test1(){
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        UserDao userDao1 = (UserDao) app.getBean("userDao");
        System.out.println(userDao);
        System.out.println(userDao1);
    }
}


com.itheima.dao.impl.UserDaoimpl@21282ed8
com.itheima.dao.impl.UserDaoimpl@36916eb0

3.3bean生命周期配置

init-method:指定类中初始化方法名称

destroy-method:指定中销毁方法名称

3.4Bean实例化三种方式

无参构造方法实例化

<?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" init-method="init" destroy-method="destory"></bean>
</beans>

package com.itheima.dao.impl;

import com.itheima.dao.UserDao;

public class UserDaoimpl implements UserDao {

    public UserDaoimpl() {
        System.out.println("UserDaoImpl创建......");
    }

    public void init(){
        System.out.println("初始化方法");
    }
    public void destory(){
        System.out.println("销毁方法");
    }
    public void save() {
        System.out.println("save running...");
    }
}

package com.itheima.damo;

import com.itheima.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserDaoDemo {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        app.close();
        userDao.save();
    }
}


UserDaoImpl创建......
初始化方法
销毁方法
save running...

工厂静态方法实例化

<bean id="userDao" class="com.itheima.factory.StaticFactory" factory-method="getUserDao"></bean>


public class StaticFactory {
    public static UserDao getUserDao(){
        return new UserDaoimpl();
    }
}


public class UserDaoDemo {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        System.out.println(userDao);
       // app.close();
    }
}


UserDaoImpl创建......
com.itheima.dao.impl.UserDaoimpl@55b0dcab

工厂实例方法实例化

<bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>


package com.itheima.factory;

import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoimpl;

public class DynamicFactory {

    public  UserDao getUserDao(){
        return new UserDaoimpl();
    }
}


public class UserDaoDemo {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        System.out.println(userDao);
//        app.close();
    }
}


UserDaoImpl创建......
com.itheima.dao.impl.UserDaoimpl@2df3b89c

Bean的依赖注入分析

目前UserService实例和UserDao实例都存在与Spring容器中,目前的做法是在容器外部获得UserService实例和UserDao实例,然后在程序中进行结合

因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在Spring容器中,将UserDao设置到UserDao内部。

依赖注入

依赖注入(Dependency Injection):他说Spring框架核心IOC的具体实现

在·编写程序时,通过控制反转,把对象的创建交给了Spring,但是代码中不可能出现没有依赖的情况。

IOC解耦只是降低他们的依赖关系,但是不会消除。例如:业务层仍会调用持久层方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJMj9bby-1621745446659)(C:\Users\你在教我作事?\Desktop\Spring笔记\img\Screenshot_20210511_214034.jpg)]

那这种业务层和持久层的依赖关系,在使用spring之后,就让Spring来维护了。

简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zD8BABv9-1621745446662)(C:\Users\你在教我作事?\Desktop\Spring笔记\img\Screenshot_20210511_214103.jpg)]

构造方法

set方法

<bean id="userDao" class="com.itheima.dao.impl.UserDaoimpl" ></bean>

<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao"></property>
</bean>

p命名空间注入本质也是set注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:

首先,需要引入p命名空间:

xmlns:p=“http://www.springframework.org/sschema/p”

其次,需要修改注入方式

    <bean id="userDao" class="com.itheima.dao.impl.UserDaoimpl" ></bean>

<!--    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">-->
<!--        <property name="userDao" ref="userDao"></property>-->
<!--    </bean>-->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao-ref="userDao"/>


</beans>
List、<Map>方法和Properties
<property name="strList" >
            <list>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </list>
        </property>
        <property name="userMap">
            <map>
                <entry key="user1" value-ref="user1"></entry>
                <entry key="user2" value-ref="user2"></entry>
            </map>
        </property>
        <property name="properties">
            <props>
            <prop key="p1">ppp1</prop>
            <prop key="p2">ppp2</prop>
            <prop key="p3">ppp3</prop>
            </props>
        </property>
    </bean>
    <bean id="user1" class="com.itheima.domain.User">
        <property name="name" value="tom"/>
        <property name="addr" value="ni"/>
    </bean>
    <bean id="user2" class="com.itheima.domain.User">
        <property name="name" value="to"/>
        <property name="addr" value="n"/>
    </bean>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>
    
    
    9

Spring相关API

ApplicationContext的继承体系

application 接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean对象

ApplicationContext的实现类

ClassPathXmlApplicationContext

它是从类根路径下加载配置文件

FileSystemXmlApplicationContext

从磁盘加载配置文件,配置文件可以在磁盘任意位置

AnnotationConfigApplicationContext

当使用注解配置容器对象,需要使用此类来创建容器。它用来读取注解

getBean()方法使用

1、根据id允许多个相同的

return getBeanFactory().getBean(name)

2、return getBeanFactory().getBean(requriedType)

获得Spring容器中的Bean对象

ApplicationContext的实现类

ClassPathXmlApplicationContext

它是从类根路径下加载配置文件

FileSystemXmlApplicationContext

从磁盘加载配置文件,配置文件可以在磁盘任意位置

AnnotationConfigApplicationContext

当使用注解配置容器对象,需要使用此类来创建容器。它用来读取注解

getBean()方法使用

1、根据id允许多个相同的

return getBeanFactory().getBean(name)

2、return getBeanFactory().getBean(requriedType)

在这里插入图片描述

标签:UserDao,配置文件,Spring,app,userDao,com,public,itheima
来源: https://blog.csdn.net/qq_52329552/article/details/117193879