Spring——IOC(二)

三、Id和Name

在Spring的配置文件中,bean的id属性和name属性可以相互替换。

(1)

<?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-2.5.xsd">

<!-- bean也可以使用name来标识 -->

<bean name="u" class="com.zgy.impl.UserDAOImpl">

</bean>

<bean id="userService" class="com.zgy.service.UserService" scope="prototype">

<!-- <property name="userDAO" ref="u" /> -->

<constructor-arg>

<ref bean="u"/>

</constructor-arg>

</bean>

</beans>

(2)

<?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-2.5.xsd">

<!-- bean也可以使用name来标识 -->

<bean name="u" class="com.zgy.impl.UserDAOImpl">

</bean>

<bean name="userService" class="com.zgy.service.UserService" scope="prototype">

<!-- <property name="userDAO" ref="u" /> -->

<constructor-arg>

<ref bean="u"/>

</constructor-arg>

</bean>

</beans>

四、简单属性注入

可以在Spring的配置文件中配置简单属性的值

范例:

(1)UserDAOImpl中有两个属性

package com.bjsxt.dao.impl;

import com.bjsxt.dao.UserDAO;

import com.bjsxt.model.User;

public class UserDAOImpl implements UserDAO {

/* (non-Javadoc)

* @see com.bjsxt.dao.UserDAO#save(com.bjsxt.model.User)

*/

private int daoId;

private String daoStatus;

public int getDaoId() {

return daoId;

}

public void setDaoId(int daoId) {

this.daoId = daoId;

}

public String getDaoStatus() {

return daoStatus;

}

public void setDaoStatus(String daoStatus) {

this.daoStatus = daoStatus;

}

public void save(User user) {

System.out.println("user saved!");

}

@Override

public String toString() {

return this.daoId + ":" + this.daoStatus;

}

}

(2)在配置文件中配置这两个属性的值

<?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-2.5.xsd">

<!-- bean也可以使用name来标识 -->

<bean name="userDAO" class="com.zgy.impl.UserDAOImpl">

<property name="daoId" value="8"></property>

<property name="daoStatus" value="good"></property>

</bean>

<bean id="userService" class="com.zgy.service.UserService">

<!-- <property name="userDAO" ref="u" /> -->

<constructor-arg>

<ref bean="u"/>

</constructor-arg>

</bean>

</beans>

(3)使用的情况不多,一般自定义属性的值不通过此方式赋值

五、bean的生存范围

Spring中的bean可以有如下几种范围:

1.singleton

单例,不论取多少次,取得的都是一个对象

(1)

<?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-2.5.xsd">

<!-- bean也可以使用name来标识 -->

<bean name="u" class="com.zgy.impl.UserDAOImpl">

</bean>

<bean name="userService" class="com.zgy.service.UserService" scope="singleton">

<!-- <property name="userDAO" ref="u" /> -->

<constructor-arg>

<ref bean="u"/>

</constructor-arg>

</bean>

</beans>

(2)测试方法:

package com.bjsxt.service;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zgy.model.User;

import com.zgy.service.UserService;

public class UserServiceTest {

@Test

public void testAdd() throws Exception {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");

UserService userService = (UserService) applicationContext.getBean("userService");

UserService userService2 = (UserService) applicationContext.getBean("userService");

System.out.println(userService == userService2);

User u = new User();

u.setName("zhangsan");

u.setPassword("zhangsan");

userService.add(u);

}

}

(3)结果:

true

user saved

2.prototype

每次取得的都是不同的对象

(1)

<?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-2.5.xsd">

<!-- bean也可以使用name来标识 -->

<bean name="u" class="com.zgy.impl.UserDAOImpl">

</bean>

<bean name="userService" class="com.zgy.service.UserService" scope="prototype">

<!-- <property name="userDAO" ref="u" /> -->

<constructor-arg>

<ref bean="u"/>

</constructor-arg>

</bean>

</beans>

(2)测试方法:

package com.bjsxt.service;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zgy.model.User;

import com.zgy.service.UserService;

public class UserServiceTest {

@Test

public void testAdd() throws Exception {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");

UserService userService = (UserService) applicationContext.getBean("userService");

UserService userService2 = (UserService) applicationContext.getBean("userService");

System.out.println(userService == userService2);

User u = new User();

u.setName("zhangsan");

u.setPassword("zhangsan");

userService.add(u);

}

}

(3)结果:

false

user saved

以下是与web相关的scope,但是与web相关的可以不使用spring来配置

3.request

4.session

5.Application

时间: 2024-08-07 12:31:50

Spring——IOC(二)的相关文章

Spring学习(二)spring ioc注入的三种方式

一.spring ioc注入有哪三种方式: a setter 原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法:"让ioc容器调用该setter方法",将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性中. b 构造器 原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数.ioc容器解析时,实例化目标对象时会自动调用构造方法,ioc只需要为构造器中的参数进行赋值:将ioc实例化的依赖对象作为构造器的参数传入

攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍

一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见,在面向接口编程的情况下,IoC可以很好的实现解耦,可以以配置的方式为程序提供所需要的接口实现类. 在实际程序开发中,我们只需要提供对应的接口及实现类,然后通过Spring的配置文件或者注解完成对依赖类的装配.二.IoC的类型: 1.通过构造函数: 此种方式的缺点是,在构造函数中注入之后一般会作为一个

深入浅出Spring(二) IoC详解

上次的博客深入浅出Spring(一)Spring概述中,我给大家简单介绍了一下Spring相关概念.重点是这么一句:Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题. 它还有一个名字叫做依赖注入(Dependency Injection)

Spring框架学习之IOC(二)

Spring框架学习之IOC(二) 接着昨天的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包括: –@Component: 基本注解, 标识了一个受 Spring 管理的组件 –@Respository: 标识持久层组件 –@Service: 标识服务层(业务层)组件 –@Controller: 标识表现层组件 对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写.

Spring Ioc学习(二)

wxWidgets和Codeblocks的编译安装,GUI程序开发平台的搭建具体步骤如下: (1)基本编译环境安装 安装编译工具(gcc之类)sudo apt-get install build-essential 安装X11sudo apt-get install libx11-dev 安装GTK需要的东西sudo apt-get install?gnome-core-devel (2)下载wxWidgets源码包并解压缩到 #{wxdir} (3)创建基于gtk和x11的编译目录${wx}

Spring IOC(二)beanName 别名管理

Spring IOC(二)beanName 别名管理 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 一.AliasRegistry public interface AliasRegistry { void registerAlias(String name, String alias); void removeAlias(String alias); boolean isAlias(String name); St

【Spring IoC】Spring Bean(二)

一.Spring Bean的定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean 是由容器提供的配置元数据创建的. bean 定义包含称为配置元数据的信息.主要包括: 如何创建一个 bean bean 的生命周期的详细信息 bean 的依赖关系 每个 bean 可以定义的属性有: class:必填,用来定义类的全限定名(包名+类名).只有子类Bean不用定义该属性

Spring IoC 依赖注入(二)源码分析

目录 Spring IoC 依赖注入(二)源码分析 1. 依赖注入口 - populateBean 1.1 doCreateBean 1.2 populateBean 2. 手动注入 2.1 相关的类说明 2.2 applyPropertyValues 2.3 BeanDefinitionValueResolver 2.4 依赖检查 2. 自动注入 2.1 那些字段会自动注入 2.2 名称注入 2.3 类型注入 Spring IoC 依赖注入(二)源码分析 本章主要分析 Spring IoC 依

《一头扎进Spring4》学习笔记(二)Spring ioc 之详解

第一节 Spring ioc 简介 IOC(控制反转:Inverse of Control),又称作 依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 第二节 Spring ico 实例 1.接口类 1 public interface Tester { 2 public void test(); 3 } 2.实体类继承接口类 1 public class Lisi implements Tester{ 2 public void test