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. HDU1257题解

    解题思路:这题的本质就是:求一个给定的数字序列中,非递增(或非递减)子序列的最少的条数. 思维误区:本题很容易被样例坑,以为是直接求跳跃点(i < j && ai < aj ...

  2. 【BZOJ】2938 [POI2000]病毒(AC自动机)

    题目 传送门:QWQ 传送到洛谷QWQ 分析 夏爷爷传送门 代码 #include <bits/stdc++.h> using namespace std; ; ][], fail[N*] ...

  3. 【学习笔记】Markdown入门

    Markdown入门 最近把博客园的编辑器换成了Markdown.   语法入门 Markdown确实好用,本来我想总结一下常用Markdown的语法,但有下面这篇文章在,我实在是不敢画蛇添足了. 基 ...

  4. sql server xml 截断

    c#读取 sql生成的xml时,发生阶段. 加,type 解决

  5. [Cpp primer] Namespace using Declarations

    If we want to use cin in the standard library, we need to std::cin To simplify this work, we can do ...

  6. 走了很多弯路的CCScrollView

    最近在学习Cocos2d-x,学习CCScrollView的时候走了很多弯路,决定记录下来. 学习cocos2d-x的最大的困惑就是资料不是很齐全,网上有很多资料,但是版本差异大,其次深度低,讲解不够 ...

  7. Flask之视图(二)

    2.2 扩展 上下文:相当于一个容器,保存了Flask程序运行过程中的一些信息. Flask中有两种上下文,请求上下文和应用上下文. 请求上下文(request context) request和se ...

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

    """ 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1 1 2 ...

  9. halcon连续采集图像

    dev_close_window()dev_update_window('off')create_bar_code_model ([], [], BarCodeHandle)dev_open_wind ...

  10. 教你用一行Python代码实现并行(转)

    教你用一行Python代码实现并行 本文教你通过一行Python实现并行化. Python在程序并行化方面多少有些声名狼藉.撇开技术上的问题,例如线程的实现和GIL,我觉得错误的教学指导才是主要问题. ...