配置形式:基于xml文件的方式;基于注解的方式

  Bean的配置方式:通过全类名(反射),通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean

  依赖注入的方式:属性注入,构造器注入

一   属性注入

1. Person.java

 public class Person{
String name; public void setName(String name) {
this.name = name;
}
public void hello() {
System.out.println("hello" + name);
} public Person(String name) {
super();
this.name = name;
}
@Override
public String toString() {
return "Person[name=" + name + "]";
} }

Main.java

  public class Main {
public static void main(String[] args) {
Person person= new Person();
person.setName("wenxl");
person.hello();
}
}

要调用person.hello(),需要先实例化一个Person对象,而在引入spring后,只需要在ApplicationContext.xml中定义一个bean,则在main方法中,只需要通过ByType或ByName方式,即可获得Person对象。配置如下,其中property属性是为person设置初始值,name为对应的成员变量,value为对应值

ApplicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 属性注入 -->
<bean id="person" class="com.text.Person">
<property name="name" value="wenxl"></property>
</bean> </beans>
 public class Main {
public static void main(String[] args) {
//1. 创建spring的ioc容器对象
//applicationContext代表ioc容器
//ClassPathXmlApplicationContext代表ac接口的实现类,用于加载配置
ApplicationContext atx = new ClassPathXmlApplicationContext("ApplicationContext.xml"); //2. 从ioc容器中获取bean实例 //利用类型返回ioc容器中的bean,但要求ioc容器中只有一个该类型的bean
Person person = atx.getBean(Person.class);
//根据id获取ioc容器中的bean
Person person2 = (Person) atx.getBean("person"); person.hello();
person2.hello();
}
}

二   构造器注入

引入Car类

public class Car {
String name;
int speed;
int price;
public void setName(String name) {
this.name = name;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public void setPrice(int price) {
this.price = price;
} public Car(String name, int speed, int price) {
this.name = name;
this.speed = speed;
this.price = price;
}
}

如下,则将按照name,speed,price的顺序,分别设置值Baoma,123,123

 <bean id="car" class="com.text.Car">
<constructor-arg value="Baoma"></constructor-arg>
<constructor-arg value="123"></constructor-arg>
<constructor-arg value="123"></constructor-arg>
</bean>

当然,也可以自行设置顺序

 <bean id="car" class="com.text.Car">
<constructor-arg index="0" value="Baoma"></constructor-arg>
<constructor-arg index="1" value="123"></constructor-arg>
<constructor-arg index="2" value="123"></constructor-arg>
</bean>

还可以采用type来表示对应的数据类型进而相互匹配,如将price改为double类型,则

 <bean id="car" class="com.text.Car">
<constructor-arg type="java.lang.String" value="Baoma"></constructor-arg>
<constructor-arg type="int" value="123"></constructor-arg>
<constructor-arg type="double" value="123"></constructor-arg>
</bean>

当包含<等特殊字符时,可用CDATA包裹。

 <bean id="car" class="com.text.Car">
<constructor-arg type="java.lang.String" >
<value><![CDATA[<audi>]]></value>
</constructor-arg>
<constructor-arg type="int" value="123"></constructor-arg>
<constructor-arg type="double" value="123"></constructor-arg>
</bean>

当需要在bean中引用另外一个bean时,采用ref或内部bean(不可被外部引用),在person类中,增加一个car对象

     <bean id="person" class="com.text.Person">
<property name="name" value="Tom"></property>
<!--
<property name="car">
<ref bean="car" />
</property>
-->
<!--
<property name="car" ref="car"></property>
-->
<property name="car">
<bean class="com.text.Car">
<constructor-arg value="Ford"></constructor-arg>
<constructor-arg value="50"></constructor-arg>
<constructor-arg value="5000" type="double"></constructor-arg>
</bean>
</property>
</bean>

级联属性

     <bean id="person" class="com.text.Person">
<constructor-arg value="lili"></constructor-arg>
<constructor-arg ref="car"></constructor-arg>
<property name="car.price" value="10000"></property>
</bean>

当Person类中新增的为List<car>,此时,property改为

 <property name="car">
<list>
<ref bean="car" />
<ref bean="car2"/>
</list>
</property>

当Person类中新增的为Map<String, car>,则property改为

 <property name="car">
<map>
<entry key="aa" value-ref="car" ></entry>
<entry key="bb" value-ref="car2"></entry>
</map>
</property>

使用props和prop子节点来为properties属性赋值

引入DataSource类

 public class DataSource {
Properties properties; public Properties getProperties() {
return properties;
} public void setProperties(Properties properties) {
this.properties = properties;
} @Override
public String toString() {
return "DataSource [properties=" + properties + "]";
} }
     <bean id="dataSource" class="com.text.DataSource">
<property name="properties">
<props>
<prop key="user">root</prop>
<prop key="password">123456</prop>
<prop key="jdbcUrl">jdbc:mysql:///test</prop>
<prop key="driverClass">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>

Spring-bean(一)的更多相关文章

  1. Spring8:一些常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

  2. Spring Bean详细讲解

    什么是Bean? Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象. Spring 容器会自动完成@bean对象的实例化. 创建应用对象之间的协作关系的行为称为:装配( ...

  3. Spring Bean的生命周期(非常详细)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  4. spring bean的生命周期

    掌握好spring bean的生命周期,对spring的扩展大有帮助.  spring bean的生命周期(推荐看)  spring bean的生命周期

  5. spring bean的重新加载

    架构体系 在谈spring bean的重新加载前,首先我们来看看spring ioc容器. spring ioc容器主要功能是完成对bean的创建.依赖注入和管理等功能,而这些功能的实现是有下面几个组 ...

  6. Spring Bean

    一.Spring的几大模块:Data access & Integration.Transcation.Instrumentation.Core Spring Container.Testin ...

  7. 【转】Spring bean处理——回调函数

    Spring bean处理——回调函数 Spring中定义了三个可以用来对Spring bean或生成bean的BeanFactory进行处理的接口,InitializingBean.BeanPost ...

  8. 在非spring组件中注入spring bean

    1.在spring中配置如下<context:spring-configured/>     <context:load-time-weaver aspectj-weaving=&q ...

  9. spring bean生命周期管理--转

    Life Cycle Management of a Spring Bean 原文地址:http://javabeat.net/life-cycle-management-of-a-spring-be ...

  10. Spring Bean配置默认为单实例 pring Bean生命周期

    Bean默认的是单例的. 如果不想单例需要如下配置:<bean id="user" class="..." scope="singleton&q ...

随机推荐

  1. [原创]Java生成Word文档

    在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上 ...

  2. mac系统下查看端口占用情况

    localhost:~ mhx$  lsof -i tcp:8080 COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NA ...

  3. Hadoop的jobhistoryserver配置

    配置mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</na ...

  4. LA-3716(sort的神用)

    题意: 给出两条长度均为n的NDA链A和B,找出一段最长的字串[l,r]使得该区域的突变位置不超过p%; 思路: sum[i]表示[1,i]中不相同的个数,可得表达式(sum[i]-sum[j])/( ...

  5. Android Studio手动下载配置Gradle的方法

    1 问题 (1) android sutdio第一次打开一个工程巨慢怎么办? (2) 手动配置Gradle Home为什么总是无效? (3) 明明已经下载了Gradle,配置了gradle home, ...

  6. Bootstrap-CSS:响应式实用工具

    ylbtech-Bootstrap-CSS:响应式实用工具 1.返回顶部 1.  Bootstrap 响应式实用工具 Bootstrap 提供了一些辅助类,以便更快地实现对移动设备友好的开发.这些可以 ...

  7. c++实现数值的整数次方(类似pow())作用

    /* * 计算数值的整数次方.cpp * * Created on: 2018年4月13日 * Author: soyo */ #include<iostream> #include< ...

  8. UI:多线程 、用GCD创建线程

    什么是应用(程序):就是我们编写的代码编译后生成的app文件 进程:凡是一个运行的程序都可以看作为一个进程,如打开的多个 word,就可以认为是一个进程的多个线程. 线程:至少有一个线程就是主线程,网 ...

  9. 6-6 Haar特征3

    B区域是包含AB这样两部分的.C区域是包含A和C这样两部分的.B区域和C区域它描述的是一个横条和一个竖条.D区域是四个方块之和. #haar 1 什么是haar? 特征 = 像素 运算 ->结果 ...

  10. UVa 1644 Prime Gap (水题,暴力)

    题意:给定一个数 n,求它后一个素数和前一个素数差. 析:先打表,再二分查找. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400 ...