好友
阅读权限10
听众
最后登录1970-1-1
|
小辣椒大佬
发表于 2018-3-14 11:17
class spring
/*------Spring容器实例化------*/
{
//加载工程classpath下的配置文件实例化
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
/*------Spring容器的使用------*/
//首先在容器配置文件ApplicationContext.xml中添加Bean定义
<bean id="标识符" class="Bean类型"/>
//然后在创建BeanFactory和ApplicationContext容器对象后,调用
//getBean()方法获取Bean实例 getBean("标识符")
/*------实例化Spring容器------*/
//使用ApplicationContext的方式实例化Spring容器
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
/*
*------Bean的实例化------
*Spring容器创建Bean对象的方法:
*用构造器来实例化
*使用静态工厂方法
*使用实例工厂方法
*/
//使用Spring容器创建bean 在applicationContext.xml中,通过<bean>声明bean
<beans>
<!--通过构造器实例化bean -->
<bean id="obj1" class="java.util.GregorianCalendar"/>
<!--通过静态工厂方法实例化bean -->
<bean id="obj2" class="java.util.Calendar" factory-method="getInstance"/>
<!--通过实例工厂方法实例化bean -->
<bean id="obj3" class="java.util.GregorianCalendar"/>
<bean id="obj4" factory-bean="obj3" factory-method="getTime"/>
</beans>
//测试方法:
public class TestCase(){
@Test
public void test(){
String cfg = "applicationContext.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(cfg);
Calendar cal1 = (Calendar)ctx.getBean("obj1");
System.out.println(cal1);
Calendar cal2 = ctx.getBean("obj2",Calendar.class);
System.out.println(cal2);
Date date = ctx.getBean("obj4",Date.class);
System.out.println(date);
}
}
/*----bean的作用域----*/
//声明bean 在applicationContext.xml中,追加一个bean声明
<!-- bean的作用域 -->
<bean id = "obj5" class="java.util.GregorianCalendar"/>
//测试:
@Test
public void test(){
String cfg = "applicationContext.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContex(cfg);
Calendar cal1 = (Calendar)ctx.getBean("obj5");
Calendar cal2 = (Calendar)ctx.getBean("obj5");
System.out.println(cal1==cal2);//true
}
//修改bean声明
<!-- bean的作用域 -->
<bean id = "obj5" class="java.util.GregorianCalendar" scope="prototype"/>
//测试,执行上述测试输出为:false
/*----bean的生命周期----*/
//创建bean
package com.shine.bean;
import java.io.Serializable;
public class ExampleBean implements Serializable{
public ExampleBean() {
System.out.println("实例化ExampleBean:" + this);
}
public void init() {
System.out.println("初始化ExampleBean");
}
public void destroy() {
System.out.println("销毁ExampleBean");
}
public void execute() {
System.out.println("执行execute方法");
}
}
//声明bean
<!-- bean的生命周期 -->
<!-- bean的延迟实例化 -->
<bean id="exampleBean" class="com.tarena.bean.ExampleBean"
init-method="init" destroy-method="destroy" />
//测试
/**
* 1.bean的生命周期;
* 2.bean的延迟实例化;
*/
@Test
public void test() {
String cfg = "applicationContext.xml";
AbstractApplicationContext ctx =
new ClassPathXmlApplicationContext(cfg);
System.out.println("----------------");
ExampleBean bean =
ctx.getBean("exampleBean", ExampleBean.class);
bean.execute();
ctx.close();
}
/*----IOC/控制反转----*/
/*IOC是指程序中对象的获取方式发生反转,又最初的new方式创建
转变为由第三方框架创建,注入(DI),他降低了对象之间的耦合度*/
/*DI:依赖注入
基本原理就是将一起工作具有关系的对象,通过构造方法参数或方法
参数传入建立关联,因此容器的工作就是创建bean时注入那些依赖关系*/
/*IOC是一种思想,DI是实现IOC的主要技术途径*/
/*DI主要有两种注入方式,Setter注入和构造器注入*/
//setter注入
package com.shine.bean;
import java.io.Serializable;
public class Computer implements Serializable {
private String mainboard; // 主板
private String hdd; // 硬盘
private String ram; // 内存
public String getMainboard() {
return mainboard;
}
public void setMainboard(String mainboard) {
this.mainboard = mainboard;
}
public String getHdd() {
return hdd;
}
public void setHdd(String hdd) {
this.hdd = hdd;
}
public String getRam() {
return ram;
}
public void setRam(String ram) {
this.ram = ram;
}
}
//声明bean;在applicationContext.xml中声明这个bean
<!-- setter注入 -->
<bean id="computer" class="com.shine.bean.Computer">
<property name="mainboard" value="技嘉"/>
<property name="hdd" value="希捷"/>
<property name="ram" value="金士顿"/>
</bean>
//测试
/**
* setter注入
*/
@Test
public void test() throws SQLException {
String cfg = "applicationContext.xml";
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(cfg);
Computer computer = ctx.getBean("computer", Computer.class);
System.out.println(computer.getMainboard());
System.out.println(computer.getHdd());
System.out.println(computer.getRam());
}
//构造器注入
//创建bean;创建一个手机类MobilePhone
package com.shine.bean;
import java.io.Serializable;
public class MobilePhone implements Serializable {
private String cpu;
private String ram;
public MobilePhone(String cpu, String ram) {
this.cpu = cpu;
this.ram = ram;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getRam() {
return ram;
}
public void setRam(String ram) {
this.ram = ram;
}
}
//声明bean;在applicationContext.xml中声明这个bean
<!--构造器注入 -->
<bean id="phone" class="com.shine.bean.MobilePhone">
<constructor-arg index="0" value="ARM"/>
<constructor-arg index="1" value="2G"/>
</bean>
//测试
/**
* 构造器注入
*/
@Test
public void test() throws SQLException {
String cfg = "applicationContext.xml";
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(cfg);
MobilePhone phone = ctx.getBean("phone", MobilePhone.class);
System.out.println(phone.getCpu());
System.out.println(phone.getRam());
}
/*自动装配*/
//通过Spring自动装配机制,自动为一个bean装配其关联的bean
//采用autowire="byType",即按照bean的类型进行自动装配
//创建bean;创建一个学生类Student,该类中有计算机、手机属性,即学生关联了计算机和手机
package com.shine.bean;
import java.io.Serializable;
public class Student implements Serializable {
private Computer computer;
private MobilePhone mobilePhone;
public Computer getComputer() {
return computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
public MobilePhone getMobilePhone() {
return mobilePhone;
}
public void setMobilePhone(MobilePhone mobilePhone) {
this.mobilePhone = mobilePhone;
}
}
//声明bean;在applicationContext.xml中声明这个bean
<!--自动装配 -->
<bean id="student" class="com.shine.bean.Student" autowire="byType">
</bean>
//测试
public void test() throws SQLException {
String cfg = "applicationContext.xml";
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(cfg);
Student student = ctx.getBean("student", Student.class);
System.out.println(student.getComputer());
System.out.println(student.getMobilePhone());
}
} |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|