Spring 基础入门-day01

1.Spring 框架的组成 ***

  IOC 控制反转 是构成Spring框架的核心

  DAO  Spring 对 JDBC 封装之后访问数据库的支持

  WebMVC Spring 对 web 技术和 MVC 设计模式的支持以及其它的web框架的支持 Struts2

  AOP 面向切面编程

  ORM 对象关系映射框架 Mybatis 

  JEE 与JavaEE服务整合

2.什么是IOC  ***

  Inversion Of Control 控制反转

  程序中需要某些对象时 由原来的new的方式 变成了由容器 来进行对象的创建 管理 以及维护组件之间的关系

  这样做到的好处  可以大大降低组件之间的耦合度。

3.Spring 容器 ***

  1.任何的java类  都可以在Spring  容器中创建对象 并由容器管理和使用

  2.Spring 容器实现IOC 和 AOP 机制

  3.Spring 容器的类型 是BeanFactory 或者 ApplicationContext 类型

4.使用Spring 容器 实现 IOC 的步骤(写熟)***

  4.1 建立一个项目 导入jar包(IOC相关) 并拷贝Spring容器对应的配置文件到src下

  4.2 在Spring容器对应的配置文件中 配置创建对象的说明

<bean id="" class="包名.类名" > </bean>

例子1:写一个测试类 创建Spring容器对象  并通过容器获取对应的对象即可

例子: applicationContext.xml配置文件中加入的代码

<!-- 配置创建日期对象  相当于 Date date = new  java.util.Date() -->
<bean id="date" class="java.util.Date"></bean>

ApplicationContextTest.java中使用容器创建对象


public static void main(String[] args) {
       //创建Spring 容器对象 并 关联配置文件
		ApplicationContext app = 
				new        ClassPathXmlApplicationContext("applicationContext.xml");
//注意使用的是Spring下面的ApplicationContext的类,
//ClassPathXml 一般选择第三个(String ConfigLocation类型的的)
		// 从容器中获取bean 对象
		Date date =  (Date) app.getBean("date");    //第一种方式
		System.out.println(date);
		Date date2 = app.getBean("date",Date.class);//推荐使用第二种方式
		System.out.println(date2);
}

例子2:创建一个HashMap类型的对象,并通过Spring 容器获取

//HashMapTest.java
public static void main(String[] args) {
		ApplicationContext app = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		HashMap map = app.getBean("map",HashMap.class);
		System.out.println(map);
		
	}
<!-- 配置创建HashMap对象 相当于 HashMap hashmap = new java.util.Map<String,String>() -->
	<bean id="map" class="java.util.HashMap"></bean>

例子3:重新建立一个项目  在这个项目中定义一个 Emp 类  这个类中成员变量 有 int   id   String name   double salary   提供get set 方法 
  提供无参带参构造重写toString方法 。然后在Spring 容器中配置这个对象 并通过容器获取这个对象打印。默认调取无参构造!!!

//Emptest.java
	public static void main(String[] args) {
		ApplicationContext app = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		Emp emp = app.getBean("emp",Emp.class);
		System.out.println(emp);
	}
<!-- 配置文件中需要配置 -->
<!-- 配置Emp 对象 构造器方式构造-->
<bean id="emp" class="com.xdl.bean.Emp"></bean>

5.Spring 容器 创建对象的三种方式 ***

第一种方式:

   构造器方式实例化 :
              <bean  id=""  class="" />
              默认调用 类型对应的无参构造

第二种方式:

   静态工厂方法实例化   ---  比如创建日历类型的对象 Calendar
    <bean  id=""  class="包名.工厂类名" factory-method="静态方法名">         

例子:

<!--配置文件 -->
    <!-- 静态工厂实例化  -->
	<bean id="cal" class="java.util.Calendar" factory-method="getInstance"></bean>
//日历类型获取 Calendar.java
public static void main(String[] args) {
		ApplicationContext app = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		//java代码形式
//		Calendar cal = Calendar.getInstance();
//		System.out.println(cal);
		Calendar cal = app.getBean("cal",Calendar.class);
		System.out.println(cal);
	}

第三种方式:

  实例工厂方法实例化
        使用一个已经存在的对象 创建另外一个对象。
        <bean  id=""  class="包名.目标对象类型"  factory-method="实例化方法名"  factory-bean="工厂类型的对象">         

cal就指已经工厂类型的对象。例子是通过Calendar对象拿出来Date类型的对象。

<!-- 静态工厂实例化  -->
	<bean id="cal" class="java.util.Calendar" factory-method="getInstance"></bean>
<!-- 实例工场方式实例化 -->
	<bean id="date2" class="java.util.Date" factory-method="getTime" factory-bean="cal"></bean>
public static void main(String[] args) {
		ApplicationContext app = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
		//java代码形式
//		Calendar cal = Calendar.getInstance();
//		System.out.println(cal);
		Calendar cal = app.getBean("cal",Calendar.class);
		System.out.println(cal);
//通过Calendar类型的对象拿出来Date类型的对象!
		Date date = app.getBean("date2",Date.class);
		System.out.println(date);
	}

6.Spring  容器中对象的作用域

  在Spring 容器中 一个bean 是单例 还是 非单例 会堪称不同的作用域

  默认一个bean 的作用域是 单例的  可以通过在bean标记上 加 scope="prototype"

  来改变对象的作用域。其它scope 取值 如 request session 等 在web部分会涉及。

7.对象的初始化 销毁 和 延迟实例化

  7.1对象的初始化

          在beans 标记中 加default-init-method="初始化方法名" 由于这样影响的类型非常多

     所以 类型中没有定义这个初始化方法也不会报错。

         另外可以在bean 标记中加 init-method="初始化方法名" 这样只影响指定的bean对象 

    所以 这个对象对应的类型中如果没有定义这个初始化方法 则会报错。

	<!-- 对象的初始化 -->
	<bean id="emp3" class="com.xdl.bean.Emp" scope="prototype" init-method="initEmp"></bean>
//Emp.java中需要添加initEmp初始化方法
public void	initEmp() {
		this.name="xxx";
		System.out.println("init emp");
	}

  7.2 对象的销毁

       在beans 标记中 加default-destroy-method="销毁方法名" 由于这样影响的类型非常多 
      所以类型中没有定义这个销毁方法也不会报错。另外可以在bean标记中加 destroy-method
       ="销毁方法名" 这样只影响指定的bean对象 所以这个对象对应的类型中如果没有定义
       这个销毁方法 则会报错。 (只适合单例对象)

<!-- 单例类型对象的销毁 -->
	<bean id="emp4" class="com.xdl.bean.Emp" scope="singleton" destroy-method="destroyEmp"></bean>
//Emp.java中加入销毁函数
public void destroyEmp() {
		System.out.println("交代后话吧!!");
	}
//测试类中若想打印出来销毁函数的输出内容需要使用下面的接口仅限单例对象
public static void main(String[] args) {
		AbstractApplicationContext app = 
				new ClassPathXmlApplicationContext("applicationContext.xml");
	       Emp emp4 = app.getBean("emp4",Emp.class);
		System.out.println(emp4);
		app.close();
	}

7.3延迟实例化 (只适合单例对象)

      对Spring 容器中单例对象   在容器启动时 就会创建这些对象。而非单例对象 是请求这个
   对象时才会创建。 哪能不能让单例对象 也在请求的时候创建 而不是容器启动时创建呢?
   可以在beans标记中加 default-lazy-init="false"  如果希望延迟实例化设置成true即可
   但是这种做法影响的范围太大 所以可以在bean标记中加 lazy-init="true"。

例子:定义一个扑克牌类 Card  里面定义两个成员变量  String  suit  String point
 提供get set方法 无参  全参  toString  。在Spring 容器配置文件中配置这个类型的
 对象  并通过Spring 容器获取。再定义一个玩家类 Player 成员变量有   int   id
 String name   int  age  double  money  Card  card 
 提供get set方法 无参  全参  toString  。在Spring 容器配置文件中配置这个类型的
 对象  并通过Spring 容器获取。


 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值