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. js手机号正则表达式验证

    var phone = $("#phone").val(); //陈旧版 var parphone = /^(((13[0-9]{1})|(17[0-9]{1})|(15[0-9] ...

  2. (转)使用 linux tar 命令压缩与解压文件

    原文链接 http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html tar -c: 建立压缩档案-x:解压-t:查看内容-r: ...

  3. 5月8日上课笔记-浮动float

    IO文件复制 字符流(只能对文本文件进行操作) Reader Writer 字节流(对所有文件都能操作) InputStream OutputStream 一.浮动 边框弧度 border-radiu ...

  4. ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql (转)

    ps -A | grep -i mysql kill 列出来的进程 service mysql start 我的问题就解决了 ------------------------------------- ...

  5. 第七章 API网关服务:Spring Cloud Zuul

    API网关是一个更为智能的应用服务器, 它的定义类似于面向对象设计模式中的Facade模式, 它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤.它除了要实现 ...

  6. selenium+python+pycharm环境搭建

    1.安装python,配置path环境变量,验证python安装成功与否 2.安装Pycharm:Pycharm是Python的IDE,所以我们需要安装一下:下载安装Selenium 3.在官网(ht ...

  7. 【Oracle】Oracle改变日志归档模式

    一.确认工作模式:   1.查询V$DATABASE      SQL>select log_mode from v$database;      归档日志:ARCHIVELOG     2.执 ...

  8. python学习——练习题(7)

    """ 题目:将一个列表的数据复制到另一个列表中. """ import copy def validate(a, b): "&q ...

  9. 跟我学算法聚类(DBSCAN)

    DBSCAN 是一种基于密度的分类方法 若一个点的密度达到算法设定的阖值则其为核心点(即R领域内点的数量不小于minPts) 所以对于DBSCAN需要设定的参数为两个半径和minPts 我们以一个啤酒 ...

  10. MySQL系统时间函数NOW(),CURRENT_TIMESTAMP(),SYSDATE()的区别

    CURRENT_TIMESTAMP是NOW的同义词,也就是说两者是相同的. SYSDATE函数返回的是执行到当前函数时的时间,而NOW返回的是执行SQL语句时的时间. 测试语句: SELECT NOW ...