配置形式:基于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. Uva 3902 Network

    题目大意: 在非叶子节点上安装最少的服务器使得,每个叶子节点到服务器的距离不超过k. 贪心+图上的dfs. 先从深度最大的叶子节点开始找.找到父节点后再用这个父节点进行扩充. /* ********* ...

  2. POJ2914 Minimum Cut —— 最小割

    题目链接:http://poj.org/problem?id=2914 Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Sub ...

  3. CentOS/Ubuntu安装GLIBCXX3.4.21

    经过测试“GLIBCXX3.4.21 not find”这篇博文解决了我的问题. 以下是安装步骤:   一.首先查看当前gcc版本 strings /usr/lib/x86_64_linux-gun/ ...

  4. Maze 解题报告

    Maze Description   You are given a special Maze described as an n*m matrix, please find the shortest ...

  5. Android多国语言文件夹汇总

    Arabic, Egypt (ar-rEG) —————————–阿拉伯语,埃及 Arabic, Israel (ar-rIL) ——————————-阿拉伯语,以色列 Bulgarian, Bulg ...

  6. BZOJ_5311_贞鱼_决策单调性+带权二分

    BZOJ_5311_贞鱼_决策单调性+带权二分 Description 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半. 这不?他们遇到了大麻烦! n只贞鱼到陆地上乘车,现在有k辆汽 ...

  7. 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP

    题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...

  8. 【转】Chrome调试鼠标悬停后出现的元素

    原文地址:https://blog.csdn.net/sparrowflying/article/details/80996550 调试小技巧:调试样式的时候,有一类元素是鼠标悬停在特定位置才会出现的 ...

  9. docker安装-卸载

    docker官网正确安装-卸载 一.查看系统内核 uname -r 3.10.0-229.el7.x86_64 二.Install Docker 1.Install with yum sudo yum ...

  10. 算法练习--LeetCode--54. Spiral Matrix 100%

      Spiral MatrixMedium Given a matrix of m x n elements (m rows, n columns), return all elements of t ...