(Spring)Spring框架管理Bean的配置文件方式(一)

1、Spring框架中标签的配置

   1) id属性和name属性的区别

          *   id        ---   Bean起个名字,在约束中采用ID的约束,唯一

          取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句号、冒号,id:不能出现特殊字符

         *   name   ---   Bean起个名字,没有采用ID的约束

          取值要求:name可以出现特殊字符。如果<bean>中没有id的话,name可以当作id使用

          Spring框架在整合Struts1框架的时候,Struts1的框架的访问路径是以/开头的,例如:/saveAction

    2) class属性:Bean对象的全路径

    3) scope属性:scope属性代表Bean的作用范围

           *   singleton    :单例(默认值)

          *   prototype   :多例,在Spring框架整合Struts2框架的时候,Action类也需要交给Spring做管理,配置把Action类配置成多例!!!

          *   request      :应用在Web项目中,每次HTTP请求都会创建一个新的Bean

          *   session       :应用在Web项目中,同一个HTTP Session共享一个Bean

          *   globalsession  :应用在Web项目中,多服务器间的session

    4) Bean对象的创建和销毁的两个属性配置

         *  说明:Spring初始化bean或销毁bean时,有时需要做一些处理工作,因此Spring可以在创建和拆卸bean的时候调用bean两个生命周期方法

         *   init-method:当bean被载入到容器的时候调用init-method属性指定的方法

         *   destroy-method:当bean从容器中删除的时候调用destroy-method属性指定的方法

              *   想看destroy-method的效果,有如下条件

                   *   scope = singleton有效

                  *   web容器中会自动调用,但是main函数或测试用例需要手动调用(需要使用ClassPathXmlApplicationContext的close()方法)


2、依赖注入DI

      1)IoC 和 DI 的概念

            *   IoC   : Inverse  of  Control,控制反转,将对象的创建权反转给Spring!!!

            *    DI    : Dependency  Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!!!!

      2)DI(依赖注入)

            *   例如:如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的 IoC 功能时,可以通过依赖注入把该属性的值传入进来

            UserServiceImpl代码:

public class UserServiceImpl implements UserService {
	private String name;
	public void setName(String name) {
		this.name = name;
	}

	public void sayHello() {
		System.out.println("Hello Spring... " + name);
	}
}
            applicationContext配置:
<?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标签,依赖注入 -->
	<bean id="userService" class="com.jadan.demo1.UserServiceImpl">
		<property name="name" value="小凤"></property>
	</bean>
</beans>


3、Spring框架的属性注入

     *   对于类成员变量,常用的注入方式有两种:

          >  构造函数注入

          >  属性setter方法注入


     *   在Spring框架中提供了前两种的属性注入方式

          方式一:构造方法的注入方式,两步

             >  编写Java的类,提供构造方法  

/**
 * 演示构造方法注入的方式
 */
public class Car1 {
	private String cname;
	private Double price;
	
	public Car1(String cname, Double price) {
		this.cname = cname;
		this.price = price;
	}
	public String toString() {
		return "Car1 [cname=" + cname + ", price=" + price + "]";
	}
}
              >  编写配置文件
<?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="car1" class="com.jadan.demo4.Car1">
		<!-- <constructor-arg name="cname" value="宝马"></constructor-arg>
		     <constructor-arg name="price" value="400000"></constructor-arg> 
		-->

		<constructor-arg index="0" value="奥迪"></constructor-arg>
		<constructor-arg index="1" value="1200000"></constructor-arg>
	</bean>
</beans>


        方式二:属性的setter方法的注入方式

           >  编写Java的类,提供属性和对应的set方法

public class Car2 {
	private String cname;
	private Double price;
	public void setCname(String cname) {
		this.cname = cname;
	}
	public void setPrice(Double price) {
		this.price = price;
	}

	public String toString() {
		return "Car2 [cname=" + cname + ", price=" + price + "]";
	}
}
            >  编写配置文件:
<?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="car2" class="com.jadan.demo4.Car2">
		<property name="cname" value="卡车"></property>
		<property name="price" value="100000"></property>
	</bean>
</beans>

       *   如果Java类的属性是另一个Java的类,需要怎么注入值????

           >  <property  name="name"  rel="具体的Bean的ID或者name的值" />

           例:

            CustomerServiceImpl:

public class CustomerServiceImpl {
	// 提供成员属性,提供set方法
	private CustomerDaoImpl customerDao;
	public void setCustomerDao(CustomerDaoImpl customerDao) {
		this.customerDao = customerDao;
	}

	public void save() {
		System.out.println("我是业务层的save...");
		// 原来编写的方式
//		new CustomerDaoImpl().save();
		
		// Spring的方式
		customerDao.save();
	}
}

            CustomerDaoImpl:

public class CustomerDaoImpl {
	public void save() {
		System.out.println("我是持久层的save...");
	}
}

            applicationContext:

<?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="customerService" class="com.jadan.demo3.CustomerServiceImpl">
		<property name="customerDao" ref="customerDao"></property>
	</bean>
	
	<bean id="customerDao" class="com.jadan.demo3.CustomerDaoImpl"></bean>
</beans>

下一篇:(Spring)Spring框架管理Bean的配置文件方式(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值