SSM学习笔记一(Spring配置文件)

Spring入门及代码实现

笔记一程序源码下载

1、在pom.xml中导入Spring的坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>learningSpring</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.2</version>
        </dependency>
    </dependencies>
</project>

2、创建Dao接口及其实现

package com.itcast.dao;

public interface Userdao {
    
    
    public void save();
}

package com.itcast.dao.impl;

import com.itcast.dao.Userdao;

public class UserDaoimpl implements Userdao {
    
    
    public void save() {
    
    
        System.out.println("save running");
    }
}

3、新建applicationContext.xml的Spring配置文件,并在该文件下配置bean

<?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.itcast.dao.impl.UserDaoimpl"></bean>
</beans>

4、创建Demo类,并执行接口中的方法

package com.itcast.demo;
import com.itcast.dao.Userdao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

在这里插入图片描述

在这之前遇到了一个error:Error:java: 错误: 不支持发行版本 5

解决方案:
1:打开设置,将箭头所指的地方换成自己jdk对应适配的版本
2:打开项目结构中的模块,设置语言级别为适配的版本
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述

Spring配置文件

1、Bean标签范围配置
在这里插入图片描述
singleton创建单例对象,创建出来的对象只有一个,共用一个地址
prototype创建多例对象,创建出来的对象的地址不一致

singleton在加载applicationContext.xml时创建对象,并加载无参构造函数
prototype在使用getBean()的时候创建对象,并加载无参构造函数
在这里插入图片描述

public class junit {
    
    
    @Test
    public void testSingleton(){
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        Userdao userDao1 = (Userdao) app.getBean("UserDao");
        Userdao userDao2 = (Userdao) app.getBean("UserDao");
    }
}

singleton:
在这里插入图片描述
在这里插入图片描述
prototype:
在这里插入图片描述
在这里插入图片描述
2、Bean生命周期配置
在这里插入图片描述
application.xml

<?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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>
</beans>
package com.itcast.dao.impl;

import com.itcast.dao.Userdao;

public class UserDaoimpl implements Userdao {
    
    
    public UserDaoimpl() {
    
    
        System.out.println("对象已创建");
    }
    public void init(){
    
    
        System.out.println("初始化...");
    }
    public void save() {
    
    
        System.out.println("save running");
    }
    public void destroy(){
    
    
        System.out.println("销毁...");
    }
}

package com.itcast;

import com.itcast.dao.Userdao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

在这里插入图片描述
3、Bean实例化的3种方式
在这里插入图片描述
工厂静态方法实例化:
StaticFactoryBean.java

package com.itcast.factory;

import com.itcast.dao.Userdao;
import com.itcast.dao.impl.UserDaoimpl;

public class StaticFactoryBean {
    
    
    public static Userdao getUserDao(){
    
    
        return new UserDaoimpl();
    }
}

application.xml

<?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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>
</beans>

测试类:

package com.itcast;

import com.itcast.dao.Userdao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

运行结果:
在这里插入图片描述
工厂实例方法实例化

package com.itcast.factory;

import com.itcast.dao.Userdao;
import com.itcast.dao.impl.UserDaoimpl;

public class DynamicFactoryBean {
    
    
	public Userdao createUserDao(){
    
    
		return new UserDaoimpl();
	}
}

application.xml

<?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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
<!--        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>-->
    <bean id="factoryBean" class="com.itcast.factory.DynamicFactoryBean"/>
    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
</beans>
package com.itcast;

import com.itcast.dao.Userdao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

在这里插入图片描述
4、Bean的依赖注入分析

package com.itcast.services;

public interface Userservices {
    
    
    public void save();
}

package com.itcast.services.impl;

import com.itcast.dao.Userdao;
import com.itcast.services.Userservices;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class userservicesimpl implements Userservices {
    
    
    public void save() {
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        Userdao userDao1 = (Userdao) app.getBean("UserDao");
        userDao1.save();
    }
}

package com.itcast.demo;

import com.itcast.services.Userservices;
import com.itcast.services.impl.userservicesimpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        Userservices userservices = (Userservices) app.getBean("UserServices");
        userservices.save();
    }
}

<?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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
<!--        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>-->
<!--    <bean id="factoryBean" class="com.itcast.factory.DynamicFactoryBean"/>-->
<!--    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>-->
    <bean id="UserDao" class="com.itcast.dao.impl.UserDaoimpl"></bean>
    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl"></bean>
</beans>

运行结果:
在这里插入图片描述
分析:Service层会调用dao层,Web层调用Service层,这里用UserController来代替Web层

可以看到userServices调用了UserDao层,由于UserDao和userServices都在Spring容器中,因此可以在容器中把UserDao注入到userServices中。对应的application.xml如下所示。

<?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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
<!--        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>-->
<!--    <bean id="factoryBean" class="com.itcast.factory.DynamicFactoryBean"/>-->
<!--    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>-->
    <bean id="UserDao" class="com.itcast.dao.impl.UserDaoimpl"></bean>
    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">
        <property name="userdao" ref="UserDao"></property>
    </bean>
</beans>

在userservicesimpl中添加属性userDao,通过setter方法来在userservicesimpl中向userService中注入userDao

package com.itcast.services.impl;

import com.itcast.dao.Userdao;
import com.itcast.services.Userservices;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class userservicesimpl implements Userservices {
    
    
    private Userdao userDao;

    public void setUserdao(Userdao userDao) {
    
    
        this.userDao = userDao;
    }
    public void save() {
    
    
        userDao.save();
    }
}

Web层:

package com.itcast.demo;

import com.itcast.services.Userservices;
import com.itcast.services.impl.userservicesimpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        Userservices userservices = (Userservices) app.getBean("UserServices");
        userservices.save();
    }
}

在这里插入图片描述
上面是通过setter方法引入,下面使用p标签的方式引入:
applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
<!--        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>-->
<!--    <bean id="factoryBean" class="com.itcast.factory.DynamicFactoryBean"/>-->
<!--    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>-->
    <bean id="UserDao" class="com.itcast.dao.impl.UserDaoimpl"></bean>
<!--    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">-->
<!--        <property name="userdao" ref="UserDao"></property>-->
<!--    </bean>-->
    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl" p:userdao-ref="UserDao"></bean>
</beans>
package com.itcast.demo;
import com.itcast.services.Userservices;
import com.itcast.services.impl.userservicesimpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        Userservices userservices = (Userservices) app.getBean("UserServices");
        userservices.save();
    }
}

在这里插入图片描述
构造方式注入:
userservicesimpl.java(添加有参构造传递userDao和创建无参构造)

package com.itcast.services.impl;

import com.itcast.dao.Userdao;
import com.itcast.services.Userservices;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class userservicesimpl implements Userservices {
    
    
    private Userdao userDao;

    public userservicesimpl() {
    
    
    }

    public userservicesimpl(Userdao userDao) {
    
    
        this.userDao = userDao;
    }

    /*    public void setUserdao(Userdao userDao) {
            this.userDao = userDao;
        }*/
    public void save() {
    
    
        userDao.save();
    }
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
<!--        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>-->
<!--    <bean id="factoryBean" class="com.itcast.factory.DynamicFactoryBean"/>-->
<!--    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>-->
    <bean id="UserDao" class="com.itcast.dao.impl.UserDaoimpl"></bean>
<!--    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">-->
<!--        <property name="userdao" ref="UserDao"></property>-->
<!--    </bean>-->
<!--    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl" p:userdao-ref="UserDao"></bean>-->
    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">
        <constructor-arg name="userDao" ref="UserDao"></constructor-arg>
    </bean>
</beans>

运行结果:
在这里插入图片描述
5、Bean的依赖注入的数据类型
在这里插入图片描述
①普通数据类型注入
第一步:在dao层添加属性username(String)和age(int)
第二步:在applicationContext.xml的dao层对应的bean中添加依赖注入
第三步:在UserController中运行

userDaoimpl.java

package com.itcast.dao.impl;

import com.itcast.dao.Userdao;

public class UserDaoimpl implements Userdao {
    
    
    private String username;
    private int age;

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
    /*    public UserDaoimpl() {
            System.out.println("对象已创建");
        }
        public void init(){
            System.out.println("初始化...");
        }*/
    public void save() {
    
    
        System.out.println(username+"===="+age);
        System.out.println("save running");
    }
/*    public void destroy(){
        System.out.println("销毁...");
    }*/
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
<!--        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>-->
<!--    <bean id="factoryBean" class="com.itcast.factory.DynamicFactoryBean"/>-->
<!--    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>-->
    <bean id="UserDao" class="com.itcast.dao.impl.UserDaoimpl">
        <property name="username" value="yangweiwen"/>
        <property name="age" value="19"/>
    </bean>
<!--    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">-->
<!--        <property name="userdao" ref="UserDao"></property>-->
<!--    </bean>-->
<!--    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl" p:userdao-ref="UserDao"></bean>-->
    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">
        <constructor-arg name="userDao" ref="UserDao"></constructor-arg>
    </bean>
</beans>

UserController.java

package com.itcast.demo;
import com.itcast.services.Userservices;
import com.itcast.services.impl.userservicesimpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        Userservices userservices = (Userservices) app.getBean("UserServices");
        userservices.save();
    }
}

运行结果:
在这里插入图片描述
②集合数据类型注入
第一步:新建domain包和User类,用来作为Map集合的参数
第二步:在UserDaoimpl中创建属性stringList,userMap,properties.
第三步:创建setter方法和toString方法
第四步:在applicationContext.xml中配置
第五步:在Web层UserController中运行
User.java

package com.itcast.domain;

public class User {
    
    
    private String name;
    private String addr;

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getAddr() {
    
    
        return addr;
    }

    public void setAddr(String addr) {
    
    
        this.addr = addr;
    }

    @Override
    public String toString() {
    
    
        return "User{" +
                "name='" + name + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

UserDaoimpl.java

package com.itcast.dao.impl;

import com.itcast.dao.Userdao;
import com.itcast.domain.User;

import java.util.List;
import java.util.Map;
import java.util.Properties;

public class UserDaoimpl implements Userdao {
    
    
    private List<String> stringList;
    private Map<String, User> userMap;
    private Properties properties;
    private String username;
    private int age;

    public void setStringList(List<String> stringList) {
    
    
        this.stringList = stringList;
    }

    public void setUserMap(Map<String, User> userMap) {
    
    
        this.userMap = userMap;
    }

    public void setProperties(Properties properties) {
    
    
        this.properties = properties;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
    /*    public UserDaoimpl() {
            System.out.println("对象已创建");
        }
        public void init(){
            System.out.println("初始化...");
        }*/
    public void save() {
    
    
        System.out.println(username+"===="+age);
        System.out.println(stringList);
        System.out.println(userMap);
        System.out.println(properties);
        System.out.println("save running");
    }
/*    public void destroy(){
        System.out.println("销毁...");
    }*/
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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.itcast.dao.impl.UserDaoimpl" init-method="init" destroy-method="destroy"></bean>-->
<!--        <bean id="UserDao" class="com.itcast.factory.StaticFactoryBean" factory-method="getUserDao"></bean>-->
<!--    <bean id="factoryBean" class="com.itcast.factory.DynamicFactoryBean"/>-->
<!--    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>-->
<!--    <bean id="UserDao" class="com.itcast.dao.impl.UserDaoimpl">-->
<!--        <property name="username" value="yangweiwen"/>-->
<!--        <property name="age" value="19"/>-->
<!--    </bean>-->
<!--    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">-->
<!--        <property name="userdao" ref="UserDao"></property>-->
<!--    </bean>-->
<!--    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl" p:userdao-ref="UserDao"></bean>-->
    <bean id="UserDao" class="com.itcast.dao.impl.UserDaoimpl">
        <property name="username" value="yangweiwen"/>
        <property name="age" value="19"/>
        <property name="stringList">
            <list>
                <value>aa</value>
                <value>bb</value>
                <value>cc</value>
            </list>
        </property>
        <property name="userMap">
            <map>
                <entry key="u1" value-ref="user1"></entry>
                <entry key="u2" value-ref="user2"></entry>
            </map>
        </property>
        <property name="properties">
            <props>
                <!--Ctrl+D复制光标所在行到下一行-->
                <prop key="p1">ppp1</prop>
                <prop key="p2">ppp2</prop>
                <prop key="p3">ppp3</prop>
            </props>
        </property>
    </bean>
    <bean id="user1" class="com.itcast.domain.User">
        <property name="name" value="zhangsan"/>
        <property name="addr" value="beijing"/>
    </bean>
    <bean id="user2" class="com.itcast.domain.User">
        <property name="name" value="lisi"/>
        <property name="addr" value="shenzhen"/>
    </bean>
    <bean id="UserServices" class="com.itcast.services.impl.userservicesimpl">
        <constructor-arg name="userDao" ref="UserDao"></constructor-arg>
    </bean>
</beans>

UserController.java

package com.itcast.demo;
import com.itcast.services.Userservices;
import com.itcast.services.impl.userservicesimpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        Userservices userservices = (Userservices) app.getBean("UserServices");
        userservices.save();
    }
}

在这里插入代码片运行结果:
在这里插入图片描述
6、引入其他配置文件

实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载

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

总结

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45394002/article/details/112856760