首页 > 其他分享 >SSM-cnblog

SSM-cnblog

时间:2023-10-19 20:57:07浏览次数:45  
标签:配置文件 System SSM bean println new cnblog out

SSM

目录

1

Spring

1.1

Spring Framework

  • 基础 最底层架构

1.2

IoC DI

  • IOC容器对象创建初始化
  • 被管理的对象叫Bean
  • 把dao,service和建立bean之间的依赖都放在一个springconfig配置文件中进行
  • 使用 @Controller 注解时,Spring会自动扫描并管理带有该注解的类,无需显式配置;在配置文件中配置 bean 需要手动指定要管理的类,并在配置文件中进行详细配置,灵活性更高,但需要更多的手动工作。

IoC

  1. 导入maven依赖
  2. 定义Spring管理的类
  3. 创建SpringConfig配置文件,配置对应的类
  4. 初始化IoC容器并从容器中获取Bean

DI

  1. 提供对应的set方法

    • 在创建bookService bean时,它会检测到setBookDao方法,并将在配置文件中配置的bookDao bean的引用传递给这个方法,从而完成依赖注入。

    • 试了下,在init前就调用了set方法

      pipt63Q.png

  2. 在xml配置文件中配置server与dao的关系

理解

  • 感觉这个像把耦合部分放到配置文件中了,如果dao修改,则不需要再修改service中的代码,而是修改配置文件,这样比较方便?

基础配置

  • @Scope注解:控制单例/多例对象;在配置文件标签中加prototype也可
  • 默认为单例,一般只有封装实体的域对象需要用多例

bean

构造方法(常用)

  • Spring创建bean的时候调用的是无参的构造方法

静态工厂(了解)

  • 静态工厂知识补充:http://t.csdnimg.cn/EUKXU
  • 标签中配工厂类名加factory-method
  • 缺点:<bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/>仅仅为了下一个bean使用,很多余且麻烦

实例工厂(重要)

  • 实例工厂的方法是非静态的,创一个实例工厂的对象,然后调用里面的dao方法
  • 创一个UserDaoFactoryBean类实现FactoryBean
  • 控制单例/非单例:在UserDaoFactoryBean类增加一个isSingleton
   <!--方式一:构造方法实例化bean-->
    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>

    <!--方式二:使用静态工厂实例化bean-->
   <bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>

    <!--方式三:使用实例工厂实例化bean-->
    <bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/>

    <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>

    <!--方式四:使用FactoryBean实例化bean-->
    <bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>

Bean生命周期

  • 关闭容器
    • ctx.close() 暴力关容器
    • ctx.registerShutdownHook(); 注册关闭钩子函数,在虚拟机退出之前回调此函数,关闭容器
  • 生命周期控制
    • 法一:自定义init和destroy,然后配置
    • 法二:接口控制
生命周期
  • 初始化容器

    • 创建对象(内存分配)
    • 执行构造方法
    • 执行属性注入( set操作)
    • 执行bean初始化方法
  • 使用bean

    • 执行业务操作
  • 关闭/销毁容器

    • 执行bean销毁方法

依赖注入

setter注入(重要)(常用)

引用类型
  • 在bean中定义引用类型属性并提供需要注入对象的set方法
  • 在配置中使用property标签name(set方法名),ref(ref指明的是哪一个bean)
简单类型
  • 在配置中使用property标签name(属性名),value(值)

构造器注入

  • 把set方法改成构造器
  • 配置文件中用constructor-arg,name写形参名称,ref写bean名
  • 解耦合
    • 指定type,index

使用场景

  • 强制依赖用构造器
  • 可注可不注用setter

举例说明:http://t.csdnimg.cn/zcDHZ

自动装配

  • 仍需提供set方法

  • autoware

  • <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
    
  • 按名称装配:bean中有一个id和类中的变量名耦合(不推荐)

  • 自动装配无法对简单类型进行依赖注入

集合注入

  • 请看vcr

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
            <!--数组注入-->
            <property name="array">
                <array>
                    <value>100</value>
                    <value>200</value>
                    <value>300</value>
                </array>
            </property>
            <!--list集合注入-->
            <property name="list">
                <list>
                    <value>itcast</value>
                    <value>itheima</value>
                    <value>boxuegu</value>
                    <value>chuanzhihui</value>
                </list>
            </property>
            <!--set集合注入-->
            <property name="set">
                <set>
                    <value>itcast</value>
                    <value>itheima</value>
                    <value>boxuegu</value>
                    <value>boxuegu</value>
                </set>
            </property>
            <!--map集合注入-->
            <property name="map">
                <map>
                    <entry key="country" value="china"/>
                    <entry key="province" value="henan"/>
                    <entry key="city" value="kaifeng"/>
                </map>
            </property>
            <!--Properties注入-->
            <property name="properties">
                <props>
                    <prop key="country">china</prop>
                    <prop key="province">henan</prop>
                    <prop key="city">kaifeng</prop>
                </props>
            </property>
        </bean>
    

管理第三方数据源

加载properties文件

piptr4S.png

  • 不加载系统属性:system-properties-mode="null"
  • 多个配置文件

相关文章

  • GIT-cnblog
    Git目录Git简介安装与常用命令本地仓库配置别名基础操作分支分支规范仓库托管配置ssh公钥常用指令git在Idea中的使用简介分布式版本控制工具安装与常用命令ls/ll查看当前目录cat查看文件内容touch创建文件vivi编辑器i或insert键:插入esc退出编辑模式zz或:wq......
  • Javaweb后端-cnblog
    Javaweb后端目录Javaweb后端MavenHTTP请求响应请求(补充)xml文件分层解耦三层架构IOC/DI入门IoC控制反转DI依赖注入MySQL事务索引分页查询MyBatis快速入门数据库连接池Lombok增删改查删除新增查询条件查询xml映射文件动态sql案例部门管理分页查询文件上传阿里云OSS配置文件参数......
  • 使用NSSM将server注册为windows系统服务说明
    1、如果server目录下有regServerService.bat批处理脚本,直接点击运行就自动注册为系统服务了,完成后在系统服务启动wgcloud-server-release,如果正在窗口模式运行server,那先关闭运行窗口如果没有这个批处理脚本,则继续往下看2、下载nssm-2.24-101-g897c7ad.zip,若已下载过,请忽略3、解压n......
  • 使用NSSM将server注册为windows系统服务说明
    1、如果server目录下有regServerService.bat批处理脚本,直接点击运行就自动注册为系统服务了,完成后在系统服务启动wgcloud-server-release,如果正在窗口模式运行server,那先关闭运行窗口如果没有这个批处理脚本,则继续往下看2、下载nssm-2.24-101-g897c7ad.zip,若已下载过,请忽略3、解压n......
  • 使用NSSM将server注册为windows系统服务说明
    1、如果server目录下有regServerService.bat批处理脚本,直接点击运行就自动注册为系统服务了,完成后在系统服务启动wgcloud-server-release,如果正在窗口模式运行server,那先关闭运行窗口如果没有这个批处理脚本,则继续往下看2、下载nssm-2.24-101-g897c7ad.zip,若已下载过,请忽略3、解压n......
  • 使用NSSM将server注册为windows系统服务说明
    1、如果server目录下有regServerService.bat批处理脚本,直接点击运行就自动注册为系统服务了,完成后在系统服务启动wgcloud-server-release,如果正在窗口模式运行server,那先关闭运行窗口如果没有这个批处理脚本,则继续往下看2、下载nssm-2.24-101-g897c7ad.zip,若已下载过,请忽略3、解压n......
  • 操作系统-cnblog
    操作系统目录操作系统1概念命令接口特征操作系统的发展单道批处理系统多道批处理系统分时操作系统实时操作系统运行机制中断和异常系统调用操作系统体系结构内核操作系统引导虚拟机2进程进程的状态与转换原语进程通信(IPC)线程概念实现方式线程的状态与转换组织与控制处理机调度进......
  • BitBake使用攻略--BitBake的语法知识二(转载自https://www.cnblogs.com/chegxy/archive
    目录写在前面1.BitBake中的任务2.任务配置2.1依赖2.1.1内部任务间的依赖2.1.2不同菜谱下的任务间依赖2.1.3运行时态下的依赖2.1.4递归依赖2.1.5任务间的依赖2.2事件2.3校验和3.ClassExtensionMechanism 写在前面这是《BitBake使用攻略》系......
  • BitBake使用攻略--从HelloWorld讲起 (转载自:https://www.cnblogs.com/chegxy/p/1571811
    目录写在前面1.什么是BitBake2.BitBake的安装3.使用BitBake构建一个HelloWorld工程后续 写在前面《BitBake使用攻略》系列文章将从今天开始不定时的更新,主要讲解BitBake的背景,基本语法,功能及其命令等知识,旨在为即将从事Yocto项目和OpenEmbedded项目的同学做一些预......
  • 用滚动的字符表示Task的运行,比较ProgressMonitorDialog
    JFace中的提供的ProgressMonitorDialog对话框,来表示正在运行的Task,还是比较方便,可设置一共的Task有多少步,现在完成了多少,还有多少没有完成的。来个例子吧:publicclassTT{ staticProgressMonitorDialogdialog; publicstaticvoidmain(String[]args){ IRunnableWithProgr......