一、 注入

a)  set

  i. JDK

    1.八种基本类型(+包装类)+String

      

<bean id="User" class="com.dsl.test2.User">
<property name="age">
<value>18</value>
</property>
<property name="name">
<value>dsl</value>
</property>
</bean>

    2.数组

      

<list>
<value>1111</value>
<value>2222</value>
<value>3333</value>
</list>

    3.List

<list>
<value>1111</value>
<value>2222</value>
<value>3333</value>
</list>

  

    4.Set

<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>

    5.Map

<map>
<entry>
<key><value>001</value></key>
<value>dsl</value>
</entry>
<entry>
<key><value>002</value></key>
<value>dsl2</value>
</entry>
</map>

    6.Properties 集合HashTable的子类 类似于Map<String,String>

    

<property name="age" value="18"/>
<property name="name" value="dsl"/>

  ii. 自定义类型(程序员自己定义+开源框架提供的类型) 成员变量注入

  

UserService{
UserDao ud;
} //spring配置文件
<bean id="UserDao" class="xxx.UserDao"/>
<bean id="UserService class="xxx.UserService">
<property name="ud">
<ref local="UserDao"/>
</property>
</bean>

    

b) 构造

<constructor-arg>
<value>18</value>
</constructor>
<constructor-arg>
<value>dsl</value>
</construcyor>

  根据标签的个数, 自动匹配对应的构造方法

  注意:构造重载

  构造方法参数不同

  通过标签个数匹配构造方法

  构造方法参数相同

  通过为标签体检type属性  区分调用哪个类型的构造方法

<constructor-arg type="int">
<value>18</value>
</constructor-arg>

二、 目的为成员变量赋值,优势是:解耦和

三 、Spring创建对象和注入的原理

  a) 创建对象

    <bean id="User" class="xxx.User"/> User{int age;String name}

      1.读取配置文件,加载类信息

      2.通过反射创建对应类的对象,反射调用无参构造函数。

  b) 注入

<bean id=”User” class=”xxxx.User”>
<property name=”age”>
<value>18</value>
</property>
<property name=”name”>
<value>dsl</value>
</property>
</bean>
User user =new User();
user.setAge(18);
user.setName(“dsl”)

四、FactoryBean技术

 对象(简单对象 可以通过构造方法直接创建的对象)

对象(复杂对象 不能通过构造方法直接创建的对象,由若干步骤组成)

  Connection :

     Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver

    Connection conn = DriverManager.getConnection();

  SqlSession:

    Resources.getResourceAsStream(“Myabtis-config.xml”)

    New SqlSessionFactoryBuilder().build(is);

    Ssf.openSession()

 a) FactoryBean开发过程

  i. 类 实现 FactoryBean接口: class ConnectionFactoryBean implements FactoryBean

ii. 覆盖接口中的所有方法 FactoryBean  方法有3 

  1. //用于书写复杂对象的创建过程的代码,并将创建的复杂对象返回

    public Object getObject(){

    Class.forName(“oracle.jdbc.OracleDriver”) //com.mysql.jdbc.Driver

    Connection conn = DriverManager.getConnection();

    return conn;

    }

  2.//用于返回复杂对象的实际类型

    public Class getObjectType(){

    return Connnection.class

    }

  

  3.//用于控制复杂对象的创建次数

    public Boolean isSingleton(){

    return true;//工厂只会创建一次当前对象  SqlSessionFactory

    return false;//每次创建一个新的对象   connection

    }

  iii.配置文件进行配置

    <bean id=”conn” class=”xxx.ConnectionFactoryBean”/>  Connection

    获取复杂对象:

    Connection  conn = (Connection)ApplicationContext.getBean(“conn”);

 

    注意:如果创建的是复杂对象(实现了FactoryBean接口),通过bena标签ID值获取的对象就是要创建的复杂对象

        1、 isSingleton方法返回值怎么确定  看需求 根据对象的特点定

        2、 获取ConnectionFactoryBean类的对象?

          ConnectionFactoryBean cfb = (ConnectionFactoryBean)ApplicationContext.getBean(“&conn”);

   

    

    

Spring框架(第二天)的更多相关文章

  1. Spring框架第二天

    ## Spring框架第二天 ## ---------- **课程回顾:Spring框架第一天** 1. 概述 * IOC和AOP 2. 框架的IOC的入门 * 创建applicationContex ...

  2. Spring框架第二篇之Bean的装配

    一.默认装配方式 代码通过getBean();方式从容器中获取指定的Bean实例,容器首先会调用Bean类的无参构造器,创建空值的实例对象. 举例: 首先我在applicationContext.xm ...

  3. Spring框架的第三天

    ## Spring框架的第三天 ## ---------- **课程回顾:Spring框架第二天** 1. IOC的注解方式 * @Value * @Resource(name="" ...

  4. Spring学习指南-第二章-Spring框架基础(完)

    第二章 Spring框架基础 面向接口编程的设计方法 ​ 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...

  5. [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续

    英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...

  6. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  7. spring框架学习(二)依赖注入

    spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普 ...

  8. spring框架详解: IOC装配Bean

    1 Spring框架Bean实例化的方式: 提供了三种方式实例化Bean. 构造方法实例化:(默认无参数) 静态工厂实例化: 实例工厂实例化: 无参数构造方法的实例化: <!-- 默认情况下使用 ...

  9. Spring框架学习一

    Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...

  10. [Spring框架]Spring IOC的原理及详解。

    这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后  受益匪浅,这里再重温一遍Spring IOC ...

随机推荐

  1. 4、关于numpy.random.seed()的使用说明

    定义:seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差 ...

  2. MySQL-08-索引简介

    B树 基于不同的查找算法分类介绍 B*Tree B-tree B+Tree 在范围查询方面提供了更好的性能(> < >= <= like) 索引简介 索引作用 提供了类似于书中 ...

  3. 结合场景使用Redis缓存与数据库同步

    Redis缓存与MySQL数据库与同步 什么场景用到了Redis缓存? 1.广告数据 2.搜索时,分类品牌名称,分类名称和规格数据 3.购物车 4.支付 问题:如何实现? 1.广告数据 先查询Redi ...

  4. SQL注入:sqli-labs:5~6 double injection(Query)

    第五题: http://127.0.0.1/sqli/Less-5/?id=1 显示:You are in--.后面发现,不管是1,2,3,4都死显示Your are in --,不打紧,继续看看 h ...

  5. 微信小程序全局数据globalData的使用问题

    如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...

  6. SSM自学笔记(四)

    8.面向切面编程AOP 1.Spring 的 AOP 简介 1.1 什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运 ...

  7. window 右键菜单中添加在vs code 打开

    原文链接: window 右键菜单中添加在vs code 打开 window 右键菜单中添加在vs code 打开 吃码小妖:以前安装VS code可以的,后面不知道为什么不能右键在VS code中打 ...

  8. Linux md5sum校验文件完整性

    使用场景:  远程备份大文件,防止网络异常断开,文件备份不完整,使用md5校验其完整性. 1. 获取文件md5值 [root@kvm-123 gitlab]# md5sum 1564248991_20 ...

  9. linux 的删除

    1,删除 命令行 rm -rf 文件夹名称 2,下载 wget 网址 -------------------- 查找ES进程号 ps -ef | grep elastic kill -9 3250 3 ...

  10. SpringMVC的拦截器和过滤器的区别

    一 简介 (1)过滤器: 依赖于servlet容器.在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次.使用过滤器的目的是用来做一些过滤操作,获取我们 ...