Spring-1 Spring基础

一 Spring快速入门

 

1.导入Spring开发的基本包坐标

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>

2.编写Dao接口和实现类

比如UserDao、UserDaoImpl

3. 创建Spring核心配置文件

resources目录下新建配置文件 applicationContext.xml

4. 在Spring配置文件中配置DaoImpl的Bean

创建bean,id自己命名,class就是类的全路径

<bean id="UserDao" class="com.stepheng.dao.impl.UserDaoImpl"></bean>

5. 使用Spring的API获得Bean实例

获取xml文件;
使用getBean获取实例

ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) app.getBean("UserDao");
userDao.save();

 

二 配置详解

 

1. scope属性

默认singleton单例,还可以设置prototype 多例,其他的request、session、global session在WEB项目中使用(不常用)。

<bean id="userDao" class="com.stepheng.dao.impl.UserDaoImpl" scope="singleton"></bean>

<bean id="userDao" class="com.stepheng.dao.impl.UserDaoImpl" scope="prototype"></bean>

理解:

选择singleton时,当Spring核心文件被加载,创建容器时,就通过无参构造器创建bean,只要容器在,对象一直在,直到销毁容器时对象被一起销毁; 

prototype时,当调用getBean()方法时实例化Bean,只要对象在使用中,就一直在,直到对象长时间不用被Java垃圾回收器回收。

2. 初始化和销毁方法

init-method:初始化方法
destroy-method:销毁方法

<bean id="userDao" class="com.stepheng.dao.impl.UserDaoImpl" init-method="init" destroy-method="destory"></bean>

3. Bean实例化三种方式

无参构造方法(默认)

工厂静态方法 --- actory-method属性

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


工厂实例方法 --- factory-bean,factory-method

<bean id="factory" class="com.stepheng.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>

4. 配置总结:

<bean>标签
        id属性:在容器中Bean实例的唯一标识,不允许重复
        class属性:要实例化的Bean的全限定名
        scope属性:Bean的作用范围,默认singleton单例,多实例是prototype
        <property>标签:属性注入
                name属性:属性名称
                value属性:注入的普通属性值
                ref属性:注入的对象引用值,引用的是beanid
                <list>标签
                <map>标签
                <properties>标签
        <constructor-arg>标签
<import>标签:导入其他的Spring配置文件

 

三 依赖注入

 

简介:它是Spring框架核心IOC的具体实现。IOC解耦只是降低他们的依赖关系,但不会消除。使用Spring,让Spring来维护而不用我们自己获取。

1. Bean两种依赖注入方式:构造方法,set方法(常用)

set方法:

1. 在类中设置属性,set方法 

2. 在xml中配置属性:

<property name="userDao" ref="userDao"></property>

还有一种P命名空间方式注入,知道即可:

<bean id="userService" class="com.stepheng.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>

2. 注入普通数据类型、集合等

注入普通数据类型

<property name="username" value="stepheng"></property>
<property name="age" value="22"></property>

注入集合数据类型

        <property name="stringList">
            <list>
                <value>stepheng</value>
                <value>sanguo</value>
                <value>shuihu</value>
            </list>
        </property>
        <property name="userDaoMap">
            <map>
                <entry key="key1" value-ref="user1"></entry>
                <entry key="key2" value-ref="user2"></entry>
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="p1">v1</prop>
                <prop key="p2">v2</prop>
            </props>
        </property>

 

四 配置import

 

分模块开发思路,加载主配置文件,主配置文件引入其他配置文件即可

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

 

五 Spring相关API

 

1. ApplicationContexgt实现类

ClassPathXmlApplicationContext,从类的根路径加载配置文件,推荐这种
FileSystemXmlApplicationContext 从磁盘路径加载配置文件
AnnotationConfigApplicationContext 注解开发使用

2. getBean()方法

getBean(String s)    传的就是Bean的id

UserService userService = (UserService) app.getBean("userService");

getBean(Class<T>)   传的是类的类型,注意:如果用这种方式,容器中该类的类型只有一个Bean对象

UserService userService = app.getBean(UserService.class);