SSM学习之路——spring第一天_环境搭建和入门

一、入门案例

一、新建maven项目

项目名称为
在这里插入图片描述

二、编辑pom.xml文件

打包方式为jar
添加spring框架的依赖
在这里插入图片描述

三、创建Account操作相关类和接口

1、Dao层接口以及其实现类
2、service层接口以及其实现类
3、模拟客户端调用
在这里插入图片描述
(1)编写IAccountDao接口
写入saveAccount方法,模拟保存一个账户

package com.itheima.dao;

public interface IAccountDao {
    void saveAccount();
}

(2)编写dao接口的实现类

package com.itheima.dao.impl;

import com.itheima.dao.IAccountDao;

public class AccountDaoImpl implements IAccountDao {

    public void saveAccount() {
        System.out.println("保存账户");
    }
}

(3)编写IAccountService接口

package com.itheima.service;

public interface IAccountService {
    void saveAccount();
}

(4)编写service接口的实现类

package com.itheima.service.impl;

import com.itheima.dao.impl.AccountDaoImpl;
import com.itheima.service.IAccountService;

public class AccountServiceImpl implements IAccountService {
    AccountDaoImpl accountDaoImpl = new AccountDaoImpl();
    public void saveAccount() {
        accountDaoImpl.saveAccount();
    }
}

四、新建bean.xml(重要)

新建xml文件
在这里插入图片描述
详见注释:
这里填写了bean对象的唯一标识id,后面将通过这个唯一标识id来找到对应的创建对象的类的字节码

<?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">
<!--    把对象的创建交给spring来管理-->
    <!--bean的唯一标识id为accountService ,class填写的是实现类的全限定类名-->
    <!--这里分别为Service和Dao的接口的实现类-->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
    <bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"></bean>
</beans>

五、模拟客户端调用(重要)

getBean后面就是填写的bean.xml中,每个bean标签的唯一标识id,IOC就是通过这个唯一标识id,来找到要创建的对象的类,通过反射创建一个类对象(这里是通过默认构造器来创建的,其他方式创建后面会讲)

package com.itheima.ui;

import com.itheima.dao.impl.AccountDaoImpl;
import com.itheima.service.impl.AccountServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {
    public static void main(String[] args) {
        //获取spring的IOC核心容器,并根据id获取对象
        
        //1、获取核心容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        //2、根据容器对象来创建类对象 
        AccountDaoImpl ad = (AccountDaoImpl) ac.getBean("accountDao");
        AccountServiceImpl as = ac.getBean("accountService",AccountServiceImpl.class);
        //3、执行对象方法
        as.saveAccount();
    }
}

以及,上面创建对象的时候用了两种方法,我们ctrl+F3点进getBeam方法,可以看到

第一个:传入一个id字符串,返回的是object类型,所以需要强转
第二个:传入id字符串,以及要创建的类T的字节码对象,返回的就是该类T,无需强转
(其实这里的AccountDaoImpl对象创建起来并没有什么用,因为我们在创建as对象的时候已经初始化了AccountDaoImpl对象,而且也发现在这个main方法中并没有用到AccountDaoImpl对象,在这里只是为了说明有两种常用创建方法)
在这里插入图片描述
运行结果:
在这里插入图片描述

二、创建对象的三种方式

一、默认构造函数创建

上面的入门案例中的bean的写法,就是通过默认构造函数创建,可以来验证一下,我们对AccountServiceImpl类进行改造:
在这里插入图片描述
运行失败:
在这里插入图片描述

二、通过工厂创建对象

在这里插入图片描述
通过工厂的newAccountServiceInstance方法返回一个AccountServiceImpl对象

package com.itheima.factory;

import com.itheima.service.impl.AccountServiceImpl;

public class AccountServiceFactory {
    public AccountServiceImpl newAccountServiceInstance(){
        return new AccountServiceImpl();
    }
}

那么bean中的写法:
在main方法中,通过调用AccountServiceImpl as = ac.getBean("accountService",AccountServiceImpl.class);
找到id为accountService的bean,通过bean标签中的factory-bean以及factory-method得知是工厂类创建的对象,由factory-bean="accountFactory" 找到idaccountFactory的bean,通过工厂类的bean实例化一个工厂对象,再执行工厂类中factory-method里的方法
在这里插入图片描述

三、静态工厂创建对象

只需将工厂类中的方法改为静态方法:
在这里插入图片描述
bean的写法如下:
由于静态方法是属于类的,所以我们可以直接利用class="com.itheima.factory.AccountServiceFactory"来找到这个工厂类,然后填写对应的方法:factory-method="newAccountServiceInstance"
即可

<bean id="accountService" class="com.itheima.factory.AccountServiceFactory"
          factory-method="newAccountServiceInstance"></bean>

三、bean的作用域

通过bean的scope属性指定

singleton:单例(默认)
prototype:多例
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用域集群环境的会话范围(全局会话范围),若不是集群环境,就是session

四、bean的生命周期

单例对象:
出生:容器创建就生成对象
活着:容器活着对象就活着
死亡:容器销毁关闭 对象就死亡
总结:同生共死
多例对象:
出生:对象被使用的时候生成
活着:对象只要在使用过程中就活着
死亡:对象长时间不用,被java垃圾回收机制回收
总结:有用的时候诞生,自然死亡

发布了23 篇原创文章 · 获赞 0 · 访问量 601

猜你喜欢

转载自blog.csdn.net/SixthMagnitude/article/details/104099408