SpringIOC容器

一、创建对象

SpringIOC容器,是spring核心内容。

作用: 创建对象 & 处理对象的依赖关系

IOC容器创建对象:

创建对象, 有几种方式:

1) 调用无参数构造器

2) 带参数构造器

3) 工厂创建对象

工厂类,静态方法创建对象

工厂类,非静态方法创建对象

事例一:构造函数是无参

创建一个无参构造函数

需要三个部分

User

 public class User {

     public User() {
System.out.println("======不带参构造器=========");
} public User(String userId, String username) {
System.out.println("======带参构造器=========");
this.userId = userId;
this.username = username;
} public User(String userId, String username, String string) {
System.out.println("======带参构造器2=========");
this.userId = userId;
this.username = username;
} private String userId;
private String username; public String getUserId() {
return userId;
} public void setUserId(String userId) {
this.userId = userId;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} @Override
public String toString() {
return "User [userId=" + userId + ", username=" + username + "]";
} }

bean.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" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 无参构造函数的 -->
<bean id="user1" class="com.liuyang.constructor.User">
</bean>
</beans>

测试类

 public class App {

     ApplicationContext aContext = new ClassPathXmlApplicationContext(
"com/liuyang/constructor/beans.xml"); @Test
public void test() {
User user = (User) aContext.getBean("user"); System.out.println(user);
}
}

事例二:构造函数是带参

更改bean.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" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 带构造函数的 -->
<bean id="user1" class="com.liuyang.constructor.User">
<constructor-arg value="100" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg value="Jack" index="1" type="java.lang.String"></constructor-arg>
</bean>
</beans>

事例三:外部引用,定义一个字符串外部引入类中(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" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--定义一个字符串类型 相当于new String("whiteRabbit")-->
<bean id="str" class="java.lang.String">
<constructor-arg value="whiteRabbit"></constructor-arg>
</bean>
<bean id="user1" class="com.liuyang.constructor.User">
<constructor-arg value="100" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg value="Jack" index="1" type="java.lang.String"></constructor-arg>
<constructor-arg index="2" type="java.lang.String"
ref="str"></constructor-arg> </bean>
</beans>

事例四:向类中插入值

更改bean.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" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 向对象中传值 -->
<bean id="str" class="java.lang.String">
<constructor-arg value="whiteRabbit"></constructor-arg>
</bean>
<bean id="user" class="com.liuyang.constructor.User">
<constructor-arg index="0" type="java.lang.String"
value="100"></constructor-arg>
<constructor-arg index="1" type="java.lang.String"
ref="str"></constructor-arg>
</bean>
</beans>

事例五:工厂创建对象和静态调用

1、user不变

2、创建类ObjectFactory

 public class ObjectFactory {

     public User getInstance() {

         return new User("100", "=====实例化一个对象=========");

     }

     public static User getStaticInstance() {
return new User("101", "=====静态方法调用========="); } }

3、更改bean.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" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 实例化一个对象 -->
<bean id="oFactory" class="com.liuyang.static1.constructor.ObjectFactory">
</bean>
<bean id="user" factory-bean="oFactory" factory-method="getInstance"></bean> <!-- 静态方法调用 -->
<bean id="user2" class="com.liuyang.static1.constructor.ObjectFactory"
factory-method="getStaticInstance"></bean>
</beans>

4、测试

 public class App {

     ApplicationContext aContext = new ClassPathXmlApplicationContext(
"com/liuyang/static1/constructor/beans2.xml"); @Test
public void test() {
User user = (User) aContext.getBean("user"); System.out.println(user);
} @Test
public void test2() {
User user2 = (User) aContext.getBean("user2"); System.out.println(user2);
}
}

Spring框架总结(三)的更多相关文章

  1. 深入学习Spring框架(三)- AOP面向切面

    1.什么是AOP? AOP为 Aspect Oriented Programming 的缩写,即面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术..AOP是OOP的延续, ...

  2. 深入浅出学习Spring框架(三):AOP 详解

    AOP的英文解释——AOPAspect Oriented Programming面向切面编程.主要目的是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 在反 ...

  3. Spring框架第三篇之基于XML的DI注入

    一.注入分类 Bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化.初始化是由容器自动完成的,称为注入.根据注入方式的不同,常用的有两类:设值注入.构造注入.实现特定接口注入 ...

  4. Spring 框架(三)

    1 spring l AOP :切面编程 切面:切入点 和 通知 结合 l spring aop 编程 <aop:config> 方法1: <aop:pointcut express ...

  5. Spring框架系列(三)--Bean的作用域和生命周期

    Bean的作用域 Spring应用中,对象实例都是在Container中,负责创建.装配.配置和管理生命周期(new到finalize()) Spring Container分为两种: 1.BeanF ...

  6. Spring框架(三)

    对象依赖关系 Spring中,如何给对象的属性赋值?  [DI, 依赖注入] 1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间 4)自动装配(了解) 5) 注解 代码示例: &l ...

  7. spring框架学习(三)——AOP( 面向切面编程)

    AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 ...

  8. Spring框架(三) JDBCTemplate,声明式事务,自动装载(注解)

    JDBCTemplate 按照标准正常项目的结构 结构图: model层 dao层 实现  dao:(DateBase Access Object) 数据访问对象,dao层只用来访问数据库和模型层 s ...

  9. 使用Spring框架入门三:基于XML配置的AOP的使用

    一.引入Jar包 <!--测试1使用--> <dependency> <groupId>org.springframework</groupId> &l ...

随机推荐

  1. 使用DOSGi在OSGi环境下发布Web Services

    前言 Apache CXF是一个开源的服务框架项目,而Distributed OSGi子项目提供了基于OSGi远程服务规范的分布式组件实现.它使用Web Services,HTTP上的SOAP手段实现 ...

  2. Linux下压缩与解压

    转自:http://www.mike.org.cn/blog/index.php?load=read&id=218###pp=0 [在解压或压缩的时候,一般还使用-v选项来现实正在处理的文件信 ...

  3. Ubuntu16下编译linux内核,报"mkimage" command not found错的解决

    "mkimage" command not found - U-Boot images will not be built /work/system/linux-3.4.20/ar ...

  4. USB驱动程序之概念介绍学习笔记

    现象:把USB设备接到PC 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能 ...

  5. php-7.1和apache httpd-2.4.29 windows环境配置

    一.apaceh2.4配置 (一).修改apache2.4.29的httpd.conf安装目录文件,第38行 原Define SRVROOT "/Apache24" 修改为(你自己 ...

  6. OD 实验(四) - 去除 NAG 窗口的几种方法

    程序: 运行 弹出一个窗口,说要注册 点击确定,到主窗口 关闭主窗口 然后弹出提醒注册的对话框 逆向程序 用 OD 打开程序 GetModuleHandleA 获取程序模块的句柄,程序在内存中的基址 ...

  7. python‘s first day for me

    计算机的基础 1,计算机由硬件及软件组成. 其中硬件主要包括了cpu,内存以及硬盘.软件则由操作系统以及一系列软件. 操作系统则可以操控硬件,使硬件完成一些需要的操作. python的历史 1989年 ...

  8. 概述XML

    xml概述--->干什么的 存储一对多的数据 作为配置文件存储数据 xml组成---->怎么用 元素的分类 包含标签体的标签(有开始标签和结束标签) 例如: <student> ...

  9. [z]【Bash命令行处理】[详解]

    (转自:http://www.linuxsir.org/bbs/thread99465.html) 我看很多兄弟写脚本或命令时出现错误的主要原因,是因为不了解bash的命令行处理.我在这里总结了一下, ...

  10. System.Drawing.Text.TextRenderingHint 的几种效果

    ; i < ; i++) { g5.TextRenderingHint = (System.Drawing.Text.TextRenderingHint)i; string txt; ; txt ...