这章主要讲配置文件,String[],List,Map,Set,自定义对象怎么配置,bean 的作用域,自动装配,我定义一个Student类,大家想想对应的配置文件该怎么写?

一:配置

   配置文件名字可以随便取,只要xml文件上面的规范是spring 的就行

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">



(1).代码


public class Student {
	private String name;
	private Address addr;
	private String[] books;
	private List
   
   
    
     hobbies;
	private Map
    
    
     
      cards;
	private Set
     
     
      
       games;
	private String wife;
	private Properties info;
	
	
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void setHobbies(List
      
      
       
        hobbies) {
		this.hobbies = hobbies;
	}
	public void setCards(Map
       
       
         card) { this.cards = card; } public void setGames(Set 
        
          games) { this.games = games; } public void setWife(String wife) { this.wife = wife; } public void setInfo(Properties info) { this.info = info; } public void show(){ System.out.println("name="+name+" addr="+addr.getAddress()); System.out.println("books="); for(int i=0;i
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
    	
      <bean id="addr" class="cn.sxt.vo.Address" scope="request">
      	<property name="address" value="北京西三旗"/>
      </bean>
	  
	  <bean id="student" class="cn.sxt.vo.Student">
	  	<property name="name" value="刘德华"/>
	  	<property name="addr" ref="addr"/>
	  	<property name="books">
	  		<array>
	  			<value>金瓶梅</value>
	  			<value>红楼梦之梦</value>
	  			<value>雾都孤儿</value>
	  		</array>
	  	</property>
	  	<property name="hobbies">
	  		<list>
	  			<value>羽毛球</value>
	  			<value>乒乓球</value>
	  			<value>玻璃球</value>
	  			<value>台球球</value>
	  		</list>
	  	</property>
	  	<property name="cards">
	  		<map>
	  			<entry key="中国银行" value="149127348932174"/>
	  			<entry>
	  				<key><value>建设银行</value></key>
	  				<value>622710023478234234</value>
	  			</entry>
	  		</map>
	  	</property>
	  	<property name="games">
	  		<set>
	  			<value>lol</value>
	  			<value>dota</value>
	  			<value>cs1.6</value>
	  			<value>dnf</value>
	  		</set>
	  	</property>
	  	<property name="wife"><null/></property>
	  	<property name="info">
	  		<props>
	  			<prop key="学号">2015052601</prop>
	  			<prop key="sex">男</prop>
	  			<prop key="name">小明</prop>
	  		</props>
	  	</property>
	  </bean>  
	  <!-- p命名空间注入 属性依然要设置set方法 -->
	  <bean id="user" class="cn.sxt.vo.User" p:name="风清扬" p:age="230"/>
	  <!-- c命名空间注入要求有对应参数的构造方法 -->
	  <bean id="u1" class="cn.sxt.vo.User" c:name="nico" c:age="16"/>
</beans>



二:bean的作用域



singleton单列  整个容器中只有一个对象实例 默认是单列
    prototype原型 每次获取bean都产生一个新的对象
    request 每次请求时创建一个新的对象
    session 在会话的范围内时一个对象
    global session 只在portlet下有用,表示是application
    application 在应用范围中一个对象

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
    	<!-- bean的作用域   
    	singleton单列  整个容器中只有一个对象实例 默认是单列
    	prototype原型 每次获取bean都产生一个新的对象
    	request 每次请求时创建一个新的对象
    	session 在会话的范围内时一个对象
    	global session 只在portlet下有用,表示是application
    	application 在应用范围中一个对象
    	-->
      <bean id="addr" class="cn.sxt.vo.Address" scope="request">
      	<property name="address" value="北京西三旗"/>
      </bean>  
</beans>




想一想假如一个类的属性又一千个(一般没有,宝宝别怕),那么我们是不是要在配置文件里面写一千个属性的配置的代码,我滴个姑奶奶啊,表示我这种笔都买不起的高穷帅很无奈,这时候自动装配就起作用了,代码配置,我们可以看到配置文件中有这么一句


http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">


他是代表在整个配置文件中的bean都自动装配。


autowire:自动装配  简化spring配置,有下面几种模式可选
  no不使用自动装配
  byName 根据名称(set方法名来的)去查找相应的bean,如果有则装配上
  byType 根据类型进行自动装配  不用管bean的id.但是同一种类型的bean只能有一个。建议慎用
  constructor 当通过构造器 注入 实例化bean时 适用byType的方式 装配构造方法


<?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" default-autowire="byName">
  	<bean id="mysqlDao" class="cn.sxt.dao.impl.UserDaoMySqlImpl"/>
  
  	<bean id="service" class="cn.sxt.service.impl.UserServiceImpl" autowire="byName"/>
</beans>