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 ...
随机推荐
- DedeCMS模板中用彩色tag做彩色关键词
DedeCMS模板中用彩色tag做彩色关键词,下面分享一下吧!修改方法: 1.在/include/common.func.php 中加入如下函数: function getTagStyle() { $ ...
- codeforces C. Magic Formulas 解题报告
题目链接:http://codeforces.com/problemset/problem/424/C 题目意思:给出 n 个数:p1, p2, ..., pn,定义: q1 = p1 ^ (1 mo ...
- 接口_简单get接口_第一个接口
import flask,json # print(__name__) ##__name__代表当前这个python文件 server = flask.Flask(__name__) #把咱们当前的这 ...
- UVA-10827(前缀和降维)
题意: 给一个n*n的正方形,第一行和最后一行粘在一块,第一列和最后一列粘在一块,求这个环面上的最大的子矩形; 思路: 直接暴力是O(n^6)的复杂度,可以把前缀和求出来,这样就可以只用枚举四条边界就 ...
- LA-3905 (扫描线)
题意: 给一些流星的初始位置和运动向量,给了相机的拍摄范围;问你最多能拍到多少颗流星; 思路: 将流星用出现在相机拍摄范围内的时间段表示;sort后在扫面端点更新最大值; Ac代码: #include ...
- Ubuntu 12.04 nethogs 流量监控查看
/*************************************************************** * Ubuntu 12.04 流量监控查看 * 说明: * 今天打算从 ...
- [SoapUI] Learn materials
SoapUI Training : http://soapui-tutorial.com/index.php * Below are the details to access the onlin ...
- 【JSOI 2009】 Count
[题目链接] 点击打开链接 [算法] 二维树状数组 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 300 # ...
- 【转】[钉钉通知系列]Jenkins发布后自动通知
转载请注明出处:https://www.cnblogs.com/jianxuanbing/p/7211006.html 阅读目录 一.前言 二.使用钉钉推送的优势 三.配置 一.前言 最近使用Jenk ...
- Bootstrap-CSS:代码
ylbtech-Bootstrap-CSS:代码 1.返回顶部 1. Bootstrap 代码 Bootstrap 允许您以两种方式显示代码: 第一种是 <code> 标签.如果您想要内联 ...