Spring-bean(一)
配置形式:基于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(一)的更多相关文章
- Spring8:一些常用的Spring Bean扩展接口
前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...
- Spring Bean详细讲解
什么是Bean? Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象. Spring 容器会自动完成@bean对象的实例化. 创建应用对象之间的协作关系的行为称为:装配( ...
- Spring Bean的生命周期(非常详细)
Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...
- spring bean的生命周期
掌握好spring bean的生命周期,对spring的扩展大有帮助. spring bean的生命周期(推荐看) spring bean的生命周期
- spring bean的重新加载
架构体系 在谈spring bean的重新加载前,首先我们来看看spring ioc容器. spring ioc容器主要功能是完成对bean的创建.依赖注入和管理等功能,而这些功能的实现是有下面几个组 ...
- Spring Bean
一.Spring的几大模块:Data access & Integration.Transcation.Instrumentation.Core Spring Container.Testin ...
- 【转】Spring bean处理——回调函数
Spring bean处理——回调函数 Spring中定义了三个可以用来对Spring bean或生成bean的BeanFactory进行处理的接口,InitializingBean.BeanPost ...
- 在非spring组件中注入spring bean
1.在spring中配置如下<context:spring-configured/> <context:load-time-weaver aspectj-weaving=&q ...
- spring bean生命周期管理--转
Life Cycle Management of a Spring Bean 原文地址:http://javabeat.net/life-cycle-management-of-a-spring-be ...
- Spring Bean配置默认为单实例 pring Bean生命周期
Bean默认的是单例的. 如果不想单例需要如下配置:<bean id="user" class="..." scope="singleton&q ...
随机推荐
- AutoIt脚本在做自动化操作的时候,如何进行错误捕获?
我的自动化脚本在运行的时候,会生成一个界面,点击该页面上的按钮能够进行自动化操作. 经常遇到的一个问题是: 脚本运行一半,GUI程序出现了异常情况,这个时候,再次点击生成的界面上的按钮,不会有任何反应 ...
- NOIP前的水题记录
CF147B Smile House 二分+矩阵快速幂,注意一下储存矩阵相乘结果的矩阵,初始化时,a[i][i]=-inf(而其他都可以a[i][i]=0,为了保证答案的可二分性). CF715B C ...
- Two
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...
- 014--python运算符和作业改进
一.运算符 % 取模,返回商的余数 10/3 3.33333333335 10//3 3 地板除,取整数,不是四舍五入 a = 3 b = 5 -----> a< ...
- HDU 5883 The Best Path (欧拉路或者欧拉回路)
题意: n 个点 m 条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大. 析:由欧拉路性质,奇度点数量为0或2.一个节点被进一次出一次,度减2,产生一次贡献,因此节点 i 的贡献为 ...
- Android App组件之ListFragment -- 说明和示例(转载)
转自:http://www.cnblogs.com/skywang12345/p/3160260.html 1 ListFragement介绍 ListFragment继承于Fragment.因此它具 ...
- 两行代码搞定网站gzip压缩
网站使用gzip压缩的好处就不用多说了吧,自行脑补,来说一下如何使用nodejs实现gzip压缩,只需要两行代码,so ease. 通过nodejs实现gzip 需要用到的模块 compression ...
- poj1308【并查集】
= =.如果输入的两个数相等.就不是一颗树啊,不能自己指向自己. 水.(瞎开的数组). //#include <bits/stdc++.h> #include<iostream> ...
- POJ1458【最长公共子序列】
基础DP. #include <iostream> #include <stdio.h> #include <string.h> #include <stac ...
- 洛谷P3537 [POI2012]SZA-Cloakroom(背包)
传送门 蠢了……还以为背包只能用来维护方案数呢……没想到背包这么神奇…… 我们用$dp[i]$表示当$c$的和为$i$时,所有的方案中使得最小的$b$最大时最小的$b$是多少 然后把所有的点按照$a$ ...