SpringMVC -IOC说明与工厂模式

1.关于单例多例说明

1.1 关于Spring容器对象创建说明

1.Spring容器中默认的对象都是单例对象(通过构造方法实例化对象)
2.有时需要通过多例对象为用户提供服务(数据源链接)

1.2 多例对象配置

<!--4.测试单例多例 通过scope属性控制对象的单例和多例
      scope="prototype" 多例设置
      scope="singleton" 缺省值  单例
    -->
   <bean id="user" class="com.jt.pojo.User" scope="prototype"></bean>

    
    
  • 1
  • 2
  • 3
  • 4
  • 5

1.3 编辑测试方法

在这里插入图片描述

2. 懒加载

懒加载: 当用户需要获取对象时,容器才创建对象,称之为懒加载
说明: Spring容器中默认的规则是:容器创建则对象创建.
如果需要配置懒加载 则需要添加额外的属性

<!--4.测试单例多例 通过scope属性控制对象的单例和多例
      scope="prototype" 多例设置
      scope="singleton" 缺省值  单例
      lazy-init="true"  开启懒加载
      lazy-init="false"/lazy-init="default"  懒加载不生效
      原则: 只要是多例对象 都是懒加载. 懒加载只对单例对象有效
      关于懒加载说明: 一般服务器对象应该先行创建,用户直接使用即可.
      多例对象: 用户使用时创建,同时将对象的生命周期交给使用者管理,
               Spring不负责维护对象的生命周期
      (随用随销)
   -->
   <bean id="user" class="com.jt.pojo.User" scope="prototype" lazy-init="true"></bean>

    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3. Spring生命周期

3.1 生命周期的过程:

1.实例化对象
2.初始化操作 (一般对对象的属性赋值)
3.用户使用对象(调用其中的方法) 
4.对象销毁 (一般都是释放资源)

    
    
  • 1
  • 2
  • 3
  • 4

3.2 编辑xml配置文件

<!--
      测试对象的生命周期
      init-method="init" 初始化方法
      destroy-method="destroy" 销毁方法
   -->
   <bean id="user" class="com.jt.pojo.User"
         init-method="init" destroy-method="destroy"/>

    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.3 编辑测试案例

//测试生命周期运行
    @Test
    public void testlife(){
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("application.xml");
        //获取对象
        User user = context.getBean(User.class);
        //3.用户调用方法
        user.say();
        //4.只要容器关闭,则对象销毁
        context.close();
    }

    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.4 关于IOC小结

核心: 对象的创建
1.通过bean标签进行创建 属性 id/class
2.工厂模式
3.单例多例/懒加载
4.生命周期

3.5 依赖注入(DI)

3.5.1 依赖注入介绍

当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

总结: 对象中的属性**,应该由spring容器动态赋值.**

3.5.2 构建POJO属性

package com.jt.pojo;
//为属性赋值的方式有2种  1.set/get  2.构造方法  alt+insert  eclipse
public class User {
<span class="token keyword">private</span> Integer id<span class="token punctuation">;</span>
<span class="token keyword">private</span> String name<span class="token punctuation">;</span>

<span class="token keyword">public</span> Integer <span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">return</span> id<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setId</span><span class="token punctuation">(</span>Integer id<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> String <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">return</span> name<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setName</span><span class="token punctuation">(</span>String name<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> <span class="token function">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>

<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token function">User</span><span class="token punctuation">(</span>Integer id<span class="token punctuation">,</span> String name<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> String <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">return</span> <span class="token string">"User{"</span> <span class="token operator">+</span>
            <span class="token string">"id="</span> <span class="token operator">+</span> id <span class="token operator">+</span>
            <span class="token string">", name='"</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">'\''</span> <span class="token operator">+</span>
            <span class="token string">'}'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

3.5.3 编辑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">

<!管理user对象>
<bean id=“user” class=“com.jt.pojo.User”>
<!调用对象的set方法实现赋值 set方法必须添加>
<property name=“id” value=“101”></property>
<property name=“name” value=“李元芳”></property>
</bean>
</beans>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.5.4 测试案例

在这里插入图片描述

3.5.5 关于DI注入说明

两种方式 1.Set注入 2.构造注入

<!--管理user对象-->
   <!--<bean id="user" class="com.jt.pojo.User">
      &lt;!&ndash;调用对象的set方法实现赋值 set方法必须添加&ndash;&gt;
      <property name="id" value="101"></property>
      <property name="name" value="李元芳"></property>
   </bean>-->

<!构造方法进行注入>
<bean id=“user” class=“com.jt.pojo.User”>
<constructor-arg name=“id” value=“102”/>
<constructor-arg name=“name” value=“兰陵王”/>
</bean>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.6 属性注入高级用法

3.6.1 编辑POJO属性

在这里插入图片描述

3.6.2 编辑xml配置文件

<!--为集合赋值-->
   <bean id="user" class="com.jt.pojo.User">
      <property name="id" value="101"></property>
      <property name="name" value="李元芳"></property>
      <property name="list">
         <list>
            <value>张三</value>
            <value>王五</value>
            <value>老王</value>
         </list>
      </property>
      <property name="set">
         <set>
            <value>1</value>
            <value>2</value>
            <value>3</value>
         </set>
      </property>
      <property name="map">
         <map>
            <entry key="id" value="1000"></entry>
            <entry key="name" value="tomcat猫"></entry>
         </map>
      </property>
      <property name="pro">
         <props>
            <prop key="proId">110</prop>
            <prop key="proName">米老鼠</prop>
         </props>
      </property>
   </bean>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

3.7 抽取集合类型

3.7.1 编辑头标签

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:util="http://www.springframework.org/schema/util"
       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
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

</beans>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.7.2 实现对象引用

在这里插入图片描述

4 Spring容器管理3层代码结构

4.1 代码结构

4.1.1 定义User POJO对象

在这里插入图片描述

4.1.2 定义dao接口/实现类

在这里插入图片描述

4.1.3 定义Service接口/实现类

在这里插入图片描述

4.1.4 编辑UserController

package com.jt.controller;

import com.jt.pojo.User;
import com.jt.service.UserService;

public class UserController {

<span class="token comment">//spring容器负责注入Service对象</span>
<span class="token keyword">private</span> UserService userService<span class="token punctuation">;</span>
<span class="token keyword">private</span> User user<span class="token punctuation">;</span>  <span class="token comment">//代替用户传入的数据</span>

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUser</span><span class="token punctuation">(</span>User user<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>user <span class="token operator">=</span> user<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUserService</span><span class="token punctuation">(</span>UserService userService<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>userService <span class="token operator">=</span> userService<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">addUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>

    userService<span class="token punctuation">.</span><span class="token function">addUser</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

4.1.5 3层代码结构关系

在这里插入图片描述

4.1.6 编辑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">

<!1.构建user对象>
<bean id=“user” class=“com.jt.pojo.User”>
<property name=“id” value=“100”></property>
<property name=“name” value=“springMVC设计模式”></property>
</bean>

<!2.构建Dao对象
根据面向接口编程
Id:接口的名称
class:实现类的包路径
>
<bean id=“userDao” class=“com.jt.dao.UserDaoImpl”></bean>

<!3.构建Service>
<bean id=“userService” class=“com.jt.service.UserServiceImpl”>
<property name=“userDao” ref=“userDao”></property>
</bean>

<!4.构建Controller>
<bean id=“userController” class=“com.jt.controller.UserController”>
<property name=“userService” ref=“userService”></property>
<property name=“user” ref=“user”></property>
</bean>
</beans>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

4.1.7编辑测试类

public class TestSpring {
<span class="token annotation punctuation">@Test</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testSpringMVC</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
    ApplicationContext context <span class="token operator">=</span>
            <span class="token keyword">new</span> <span class="token class-name">ClassPathXmlApplicationContext</span><span class="token punctuation">(</span><span class="token string">"application.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    UserController userController <span class="token operator">=</span> <span class="token punctuation">(</span>UserController<span class="token punctuation">)</span> context<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">"userController"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    userController<span class="token punctuation">.</span><span class="token function">addUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"恭喜学会MVC结构"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4.2 关于特殊字符说明

说明: 由于由于业务需要xml配置文件中 可能会有特殊字符,但是该特殊字符与xml关键字(标签)形成冲突.
解决方案: 实现字符串转义
在这里插入图片描述
特殊转义字符:
< < 小于
> > 大于
& & 和号
’ ’ 单引号
" " 引号

在这里插入图片描述
万能转义字符: <![CDATA[XXX任意字符]]>
在这里插入图片描述

作业: 在mybatis中 在sql语句中添加特殊字符 使用上述结构优化.

知识梳理

1.单例多例 scope属性
2.懒加载
3.生命周期 1.创建对象 2初始化数据 3.被用户调用 4.对象销毁
4.依赖注入: 1set注入 2.构造注入(必须有无参构造)
5.公共集合编辑(了解!!!)

原文链接:https://blog.csdn.net/qq_16804847/article/details/116003622?spm=1001.2014.3001.5501

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值