Spring
(1)Spring是什么?
Spring是一个开源的用来简化应用开发的框架。
(2)Spring的特点?
简化开发
Spring对很多常用的api做了简化(比如,Spring对jdbc就做了很好的 封装,我们利用Springjdbc访问数据库,就不用考虑如何获取连接和关闭 连接)。
解耦
Spring帮我们管理对象之间的依赖关系,这样,便于代码的维护。
集成
Spring可以集成其它的一些框架。集成之后,这些框架的使用会变得 更加的简单。
(3)Spring容器
Spring容器是什么?
Spring框架当中的一个核心模块,用来管理对象。
如何启动Spring容器?
step1. 导包。
step2. 添加配置文件。
step3. 编写启动Spring容器的代码。
如何创建对象?
方式一 无参构造器
step1. 类应用提供无参构造器(或者缺省构造器)。
step2. 在配置文件当中,添加一个bean元素。
step3. 启动Spring容器,调用容器提供的getBean方法获得要创建的 对象。
方式二 静态工厂方法 (了解)
方式三 实例工厂方法 (了解)
代码如下:
配置文件:applicationContext.xml
<!-- 使用无参构造器创建对象
id属性:bean的名称,要求唯一 class属性: 类的全限定名
-->
<bean id="stu1" class="first.Student"></bean>
<bean id="date1" class="java.util.Date"></bean>
<!-- 使用静态工厂方法创建对象 Calendar这个类没有无参构造器
factory-method属性:指定一个静态方法
spring容器会调用这个静态方法来创建对象
-->
<bean id="cal" class="java.util.Calendar" factory-method="getInstance"></bean>
<!-- 使用实例工厂方法创建对象
factory-bean属性:指定一个bean的ID,
factory-method属性:指定一个实例方法(非静态)
spring容器会调用这个bean的方法来创建关键对象
-->
<bean id="time1" factory-bean="cal" factory-method="getTime"></bean>
java代码:
package first;
import java.util.Calendar;
import java.util.Date;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class FirstSpring {
public static void main(String[] args) {
//启动容器
ApplicationContext ac =
new ClassPathXmlApplicationContext("applicationContext.xml");
//System.out.println(ac);
//获得对象-用第二种
//Student stu = (Student)ac.getBean("stu1");
Student stu = ac.getBean("stu1", Student.class);
System.out.println(stu);
System.out.println("=======================");
Date date1 = ac.getBean("date1",Date.class);
System.out.println(date1);
System.out.println("=======================");
Calendar cal = ac.getBean("cal",Calendar.class);
System.out.println(cal);
System.out.println("=======================");
Date time1 = ac.getBean("time1",Date.class);
System.out.println(time1);
}
}
实体类Student:
package first;
public class Student {
public Student() {
System.out.println("Student()");
}
}
输出结果:
Student()
first.Student@1efea79
=======================
Fri May 26 11:06:34 CST 2017
=======================
java.util.GregorianCalendar[time=1495767994157,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=26,DAY_OF_YEAR=146,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=6,SECOND=34,MILLISECOND=157,ZONE_OFFSET=28800000,DST_OFFSET=0]
=======================
Fri May 26 11:06:34 CST 2017