• Spring入门(Spring程序开发步骤)


    目录

    1、Spring程序开发步骤

    1.1、导入Spring开发的基本包坐标

    1.2、编写Dao接口和实现类

    1.3、创建Spring核心配置文件

    1.4、测试程序

    2、Bean标签范围配置

    2.1、scope属性

    2.2、Bean实例化时机 

    2.3、Bean生命周期配置

    2.4、实例化Bean的三种方式


    前言:本次整理内容为黑马视频课程,进行笔记整理。 

    1、Spring程序开发步骤

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

    2、编写Dao接口和实现类。

    3、创建Spring核心配置文件。

    1.1、导入Spring开发的基本包坐标

    首先我们需要创建一个Maven工程,在pom文件中导入Spring的坐标

    pom文件

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>cn.itsslgroupId>
    6. <artifactId>spring_01artifactId>
    7. <version>1.0-SNAPSHOTversion>
    8. <dependencies>
    9. <dependency>
    10. <groupId>org.springframeworkgroupId>
    11. <artifactId>spring-contextartifactId>
    12. <version>5.3.2version>
    13. dependency>
    14. <dependency>
    15. <groupId>junitgroupId>
    16. <artifactId>junitartifactId>
    17. <version>4.10version>
    18. dependency>
    19. dependencies>
    20. project>

    1.2、编写Dao接口和实现类

    在包路径下创建dao层和实现类,并编写一个方法show()用来测试

    UserDao接口

    1. public interface UserDao {
    2. void show();
    3. }

    UserDaoImpl类

    1. public class UserDaoImpl implements UserDao {
    2. //重写show()方法
    3. public void show() {
    4. System.out.println("show running....");
    5. }
    6. //无参构造
    7. UserDaoImpl(){
    8. System.out.println("无参构造...");
    9. }
    10. }

    1.3、创建Spring核心配置文件

    用于配置对象交由Spring来创建。

    默认情况下它调用的是类中无参构造函数,如果没有无参构造函数则不能创建成功。

    在resources文件中创建一个xml文件,命名为ApplicationContext(推荐命名,可以自定义)

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    4. <bean id="UserDao" class="cn.itssl.dao.Impl.UserDaoImpl">bean>
    5. beans>

    标签中的属性介绍: 

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

    class:Bean的全限定名称。 

    注意:这里的bean标签里id名可以随意起,这里是为了方便测试直接起成UserDao,class里填写的就是UserDaoImpl的路径,为了避免书写错误,可以右键UserDaoImpl点击Copy Reference,直接粘贴过去。

    1.4、测试程序

    我们在测试包下创建一个测试类,用来测试。

     

    利用多态进行创建ApplicationContext对象,ClassPathXmlApplicationContext中填入xml配置文件。获取到app对象,通过app的方法getBean方法创建UserDao对象。 

    1. public class userDaoTest {
    2. public static void main(String[] args) {
    3. ApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext.xml");
    4. UserDao userDao = (UserDao) app.getBean("UserDao");
    5. System.out.println(userDao);
    6. }
    7. }

    2、Bean标签范围配置

    2.1、scope属性

    在实际开发中,可能需要用到的对象有不同的模式,其中就有单例模式和多例模式,在之前我们都是通过工厂创建单例或者多例,那么在Spring中如何控制单例和多例呢?

    在bean标签中,有一个属性可以控制scope,有两个关键词,一个为singleton(单例)、prototype(多例)。

    scope属性中关键词:

    取值范围说明
    singleton默认值,单例模式
    prototype多例模式

    单例模式演示

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    4. <bean id="UserDao" class="cn.itssl.dao.Impl.UserDaoImpl" scope="singleton">bean>

     测试类我们通过getBean获取两个userDao对象,看看地址值是否一样

    1. public class userDaoTest {
    2. public static void main(String[] args) {
    3. ApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext.xml");
    4. UserDao userDao1 = (UserDao) app.getBean("UserDao");
    5. UserDao userDao2 = (UserDao) app.getBean("UserDao");
    6. System.out.println(userDao1);
    7. System.out.println(userDao2);
    8. }
    9. }

    可以看出,地址值是一模一样的,说明这就是单例模式。

    多例模式演示

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    4. <bean id="UserDao" class="cn.itssl.dao.Impl.UserDaoImpl" scope="prototype">bean>

    可以发现这次的地址值不一样了,那么说明就是多例模式了。

    2.2、Bean实例化时机 

    1、当scope的取值为singleton时

    Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

    Bean的生命周期:

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

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

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

    2、当scope的取值为prototype时

    Bean的实例化时机:当调用getBean()方法时实例化Bean

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

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

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

    2.3、Bean生命周期配置

    为了方便看到bean何时被创建,何时被销毁,我们在实现类中写两个方法,分别是initialization方法和destroy方法,这两个方法命名随意。

    userDaoImpl实现类

    1. public void show() {
    2. System.out.println("show running....");
    3. }
    4. public UserDaoImpl(){
    5. System.out.println("无参构造...");
    6. }
    7. //初始化方法
    8. public void initialization(){
    9. System.out.println("初始化...");
    10. }
    11. //销毁方法
    12. public void destroy(){
    13. System.out.println("销毁");
    14. }

     那么如何让这两个方法生效呢,就用bean去管理它,配置xml中bean标签中的属性init-method(初始化方法)和destory-method(销毁方法)。属性中填写的就是你写的方法名

    ApplicationContext.xml配置文件

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    4. <bean id="userDao" class="cn.itssl.dao.Impl.UserDaoImpl" init-method="initialization" destroy-method="destroy">bean>
    5. beans>

    测试类 

    1. public class userDaoTest2 {
    2. public static void main(String[] args) {
    3. ApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext.xml");
    4. UserDao userDao = (UserDao) app.getBean("userDao");
    5. System.out.println(userDao);
    6. }
    7. }

    可以看到无参构造先被执行,然后运行初始化方法,最后输出对象。那么销毁方法怎么没有输出呢?因为 ApplicationContext没有close方法,而它的子类ClassPathXmlApplicationContext有close关闭方法,所以我们需要手动去关闭bean,我们直接创建ApplicationContext的子类对象,最后调用ClassPathApplication的close方法。

    1. public class userDaoTest2 {
    2. public static void main(String[] args) {
    3. ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext.xml");
    4. UserDao userDao = (UserDao) app.getBean("userDao");
    5. System.out.println(userDao);
    6. app.close();
    7. }
    8. }

     

     可以看到最后执行了销毁方法。

    2.4、实例化Bean的三种方式

    1、无参构造方法实例化(上面代码已演示)

    2、工厂静态方法实例化

    3、工厂实例方法实例化

    工厂静态方法实例化

    我们需要再创建一个包为factory的工厂包,用来存放工厂类

    创建StaticFactory类 

    1. public class StaticFactory {
    2. //静态方法
    3. public static UserDao getUserDao(){
    4. //返回userDao的实现类对象
    5. return new UserDaoImpl();
    6. }
    7. }

    配置ApplicationContext.xml文件

    class路径选择工厂类,然后添加属性factory-method,书写静态实例化方法名,因为静态方法是属于类的,所以可以写工厂类路径,通过factory-method获取方法。

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    4. <bean id="userDao" class="cn.itssl.factory.StaticFactory" factory-method="getUserDao">bean>
    5. beans>

    测试类

    1. public class userDaoTest3 {
    2. public static void main(String[] args) {
    3. ApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext1.xml");
    4. UserDao userDao = (UserDao) app.getBean("userDao");
    5. System.out.println(userDao);
    6. }
    7. }

    工厂静态实例化成功运行!

    工厂实例方法实例化

    我们再在factory包下创建一个DynamicFactory类

    DynamicFactory类

    1. public class DynamicFactory {
    2. //非静态方法
    3. public UserDao getUserDao() {
    4. return new UserDaoImpl();
    5. }
    6. }

    ApplicationContext.xml配置文件 

    因为getUserDao现在不属于类了,所以我们需要先配置一个bean来获取工厂类对象,class里书写的是DynamicFactory类的路径,然后再创建一个bean使用factory-bean来接收工厂类对象factory,然后通过factory-method属性获取getUserDao方法,这里可能会有点绕,反复理解一下,静态是属于类,非静态是不属于类,所以非静态需要多做一步操作,就是用一个bean先去创建类对象,再由另一个bean去接收。

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    4. <bean id="factory" class="cn.itssl.factory.DynamicFactory">bean>
    5. <bean id="userDao" factory-bean="factory" factory-method="getUserDao">bean>
    6. beans>

    测试类

    1. public class userDaoTest4 {
    2. public static void main(String[] args) {
    3. ApplicationContext app=new ClassPathXmlApplicationContext("ApplicationContext2.xml");
    4. UserDao userDao = (UserDao) app.getBean("userDao");
    5. System.out.println(userDao);
    6. }
    7. }

    ​​​​​​​

  • 相关阅读:
    协同设计有哪些优势和作用?
    力扣-字符串-字符的统计
    基于SpringBoot招聘管理系统设计和实现(源码+LW+调试文档+讲解等)
    3d可视化产品爆炸图案例
    ELK 企业级日志分析系统
    洛谷 P1306 斐波那契公约数 (矩阵快速幂, 辗转相除法)
    集群配置步骤_java培训
    MySQL 高级(进阶) SQL 语句 (一)
    Unity与IOS⭐Unity接入IOS SDK的流程图
    【面试】测试/测开(未完成版)
  • 原文地址:https://blog.csdn.net/select_myname/article/details/126273108