java 框架 SSM 学习 核心容器IoC


前言

首次使用博客记录学习


一、SSM是什么?

SSM框架是spring、spring MVC 、和mybatis框架的整合,是标准的MVC模式。标准的SSM有四层架构,简化企业级开发的复杂性,框架整合高效整合其他技术,提高企业级应用开发与运行效率,

简化开发的技术

IoC

AOP

        事物处理

框架整合

MyBatis

MyBatis- plus

Struts

Hibernate

具有完整的开发的生态圈,Spring提供若干项目,每个项目可用于完成特定的功能

框架

Spring Framework 系统架构

 Ioc(Inversion of Control) 控制反转:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移给外部,此思想称为控制反转,可降低代码的耦合性

Spring 技术 提供了一个容器,称为IoC容器,用来充当Ioc思想中的外部

IoC容器负责对象的创建、初始化等一系列的工作,被创建或被管理的对象在IoC容器中统称为Bean

DI(Dependency Injection)依赖注入 (将有依赖关系的bean进行关系绑定)

在容器中建立bean 与 bean 之间的依赖关系的整个过程,称为依赖注入

二、使用IOC

1.入门案例

管理Service 与 Dao

将被管理的对象告知IOC容器(配置)

获取IoC容器(接口)

获取容器中的bean

第一步:先在pom.xml导包

配置文件的代码如下(示例):

两个版本若一个版本报错可尝试另外一个

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>sping-context</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>


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

第二步:在resource 文件夹 中创建 spring 文件导入spring 的坐标

<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 的 坐标 spring-context 对应的版本-->
    <!--        配置bean-->
    <!--    bean标签标识配置bean
            id属性标识给bean起名字
            class属性表示给bean定义类型-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">

    </bean>
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <!--7.配置server与dao的关系-->
        <!--property标签表示配置当前bean的属性
        name属性表示配置哪一个具体的属性
        ref属性表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>
    </bean>
</beans>

 调用bean的属性需要在主程序中获取Ioc容器

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

(applicationContext.xml是spring文件的地址)

通过getBean 的方法获取bean

2.bean的配置

1;bean的基础配置

2;bean的别名配置

bean可以定义多个别名通过使用逗号,分号 空格分隔

3;bean的作用范围配置

bean 默认单例模式,节省资源

适合交给容器进行管理的bean

表现层对象、业务层对象、数据层对象、工具对象

不适合交给容器进行管理的bean

封装实体的域对象

bean 的实例化

1、使用构造方法实现bean的实例化

2、使用静态工厂

静态工厂

dao层


//定义一个接口
public interface OrderDao {
    public void save();
}

//接口的实现类
public class OrderDaoImpl implements OrderDao {
    public void save() {
        System.out.println("public save");
    }

}

//工厂类对象
public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        return new OrderDaoImpl();
    }
}


//sping文件
<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"></bean>
</beans>



//主程序调用
public class AppForinstanceOrder {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");
        orderDao.save();
    }
}

3、实例化工厂

public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    public UserDao getObject() throws Exception{
        return new UserDAoImpl();
        
    }
    public Class<?> getObjectType() {
        return UserDao.class;
    }

}

生命周期的控制

实现InitializingBean,DisposableBean 接口

public class BookServiceImpl implements BookService . InitializingBean ,DisposableBean {
    
      


}

依赖注入方式

1.setter 注入

标签为<property name = "" ref = "">

2.构造器注入

//sping配置
<bean id="bookDao" class="com.itheima.service.impl.BookServiceImpl" >
    <constructor-arg name = "bookDao" ref= "bookDao"/>
</bean>
//简单方法注入
<bean id="bookDao" class="com.itheima.service.impl.BookDaoImpl" >
    <constructor-arg name = "//自定义的名字" value= ""/>
</bean>
//service层
//直接生成构造方法

依赖注入方式的选择:

1.强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现、

2.可选依赖使用setter注入进行,灵活性强

3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨

4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入

5.实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入

6.自己开发的模块推荐使用setter注入

依赖的自动装配

1.按类型

<autowire="byType">

2.按名称

<autowire="byName">

依赖自动装配的特征

自动装配用于引用类型依赖注入,不能对简单类型进行操作

使用按类型装配时 ( byType )必须保障容器中相同类型的bean唯一,推荐使用

使用按名称装配时( byName )必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用

自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

管理第三方的maven库格式

//管理DruidDataSource对象
<bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource"
    <property name = "driverClassName" value = "com.mysql.jdbc.Driver"
    <property name = "url" value = "jdbc://mysql://localhost:3306/....."
    <property name = "uesrname" value = ""/>
    <property name = "password" value = ""/>
</bean>

核心容器总结

这里对文章进行总结

容器相关

BeanFactory 是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载

ApplicationContext 接口是Spring容器的核心接口,初始化时bean立即加载

ApplicationContext接口提供基础的bean相关的方法,通过其他的接口扩展其功能

ApplicationContext接口常用初始化类

        ClassPathXmlApplicationContext

        FIleSystemXmlApplicationContext

Bean相关

<bean 
    id = "bookDao"            //bean的id
    name = "dao bookDaoIMpl"  //bean的别名
    class = "com.itheima.dao.impl.BookImpl"   //bean 的类型 静态工厂类
    scope="singleton"         //控制bean的实例数量
    init-method= "init"       //生命周期的初始化方法
    destroy-method="destory"  //生命周期的销毁方法
    autowire = "byType"       //自动装配类似
    factory-method = "getInstance" //bean的工厂方法应用于静态工厂或者实例工厂
    lazy-init = "true"        //控制bean延迟加载
/> 

依赖注入相关

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值