Spring 是一个开源框架.

Spring 为简化企业级应用开发而生(对比EJB2.0来说). 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。
Spring 是一个 IOC(DI) 和 AOP 容器框架。

 

具体描述 Spring:
轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
控制反转(依赖注入) (IOC----inverse of control 、DI --- dependency injection)
面向切面编程(AOP --- aspect oriented programming)
容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象
一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)

所需jar包

 

<? 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  name="dog" class="com.zhiqi.entity.Dog"></ bean >
     
</ beans >

  装配一个Bean

package  com.zhiqi.entity;
 
public  class  Dog {
 
     private  String name;
 
     public  String getName() {
         return  name;
     }
     public  void  setName(String name) {
         this .name = name;
     }
 
}

  

package  com.zhiqi.test;
 
import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
 
import  com.zhiqi.entity.Dog;
 
public  class  T {
 
     public  static  void  main(String[] args) {
         ApplicationContext ac= new  ClassPathXmlApplicationContext( "beans.xml" );
         Dog dog=(Dog)ac.getBean( "dog" );
         System.out.println(dog.getName());
     }
}

  

此时装配了Dog这个类,但是为null

需要进行依赖注入(属性注入、构造方法注入,工厂注入)

1、属性注入:

装配一个员工类

package  com.zhiqi.entity;
 
public  class  Employee {
 
     private  int  id;
     private  String name;
     private  String sex;
     public  int  getId() {
         return  id;
     }
     public  void  setId( int  id) {
         this .id = id;
     }
     public  String getName() {
         return  name;
     }
     public  void  setName(String name) {
         this .name = name;
     }
     public  String getSex() {
         return  sex;
     }
     public  void  setSex(String sex) {
         this .sex = sex;
     }
}

  

package  com.zhiqi.test;
 
import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
 
import  com.zhiqi.entity.Dog;
import  com.zhiqi.entity.Employee;
 
public  class  T {
 
     public  static  void  main(String[] args) {
         ApplicationContext ac= new  ClassPathXmlApplicationContext( "beans.xml" );
         Employee employee=(Employee)ac.getBean( "employee" );
         System.out.println(employee.getName());
     }
}

  

属性注入如下:<property name="" value=""></property>

< bean  name="employee" class="com.zhiqi.entity.Employee">
         < property  name="id" value="10050"></ property >
         < property  name="name" value="小鲜肉"></ property >
         < property  name="sex" value="男"></ property >
     </ bean >

构造方法注入一(通过类型):<constructor-arg type="" value=""></constructor-arg>

< bean  name="employee" class="com.zhiqi.entity.Employee">
         < constructor-arg  type="int" value="10010"></ constructor-arg >
         < constructor-arg  type="String" value="小萝莉"></ constructor-arg >
         < constructor-arg  type="String" value="女"></ constructor-arg >
     </ bean >

  此时需要写构造函数否则会报错:

public  class  Employee {
 
     private  int  id;
     private  String name;
     private  String sex;
     
     public  Employee() {
         super ();
         // TODO Auto-generated constructor stub
     }
     public  Employee( int  id, String name, String sex) {
         super ();
         this .id = id;
         this .name = name;
         this .sex = sex;
     }
}

  

构造方法注入二(通过索引):<constructor-arg index="" value=""></constructor-arg>   索引从0开始

< bean  name="employee" class="com.zhiqi.entity.Employee">
         < constructor-arg  index="0" value="10010"></ constructor-arg >
         < constructor-arg  index="1" value="小萝莉"></ constructor-arg >
         < constructor-arg  index="2" value="女"></ constructor-arg >
     </ bean >

 可以混合使用 类型+索引

< bean  name="employee" class="com.zhiqi.entity.Employee">
         < constructor-arg  type="int" index="0" value="10010"></ constructor-arg >
         < constructor-arg  type="String" index="1" value="小萝莉"></ constructor-arg >
         < constructor-arg  type="String" index="2" value="女"></ constructor-arg >
     </ bean >

通过工厂注入:<bean name="employee" factory-bean="" factory-method=""></bean>

package  com.zhiqi.factory;
 
import  com.zhiqi.entity.Employee;
 
public  class  EmployeeFactory {
 
     public  Employee createEmployee(){
         Employee employee= new  Employee();
         employee.setId( 10080 );
         employee.setName( "小霸王" );
         employee.setSex( "男" );
         return  employee;
     }
}

  

<? 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  name="dog" class="com.zhiqi.entity.Dog"></ bean >
     
     < bean  name="employeeFactory" class="com.zhiqi.factory.EmployeeFactory"></ bean >
     < bean  name="employee" factory-bean="employeeFactory" factory-method="createEmployee"></ bean >
     
</ beans >

  

通过静态工厂注入:

注入参数:

1、基本类型值

2、注入bean

3、内部bean

4、null值

5、级联属性

6、集合注入(List、Set、Map)

员工有一辆车

< bean  id="employee" class="com.zhiqi.entity.Employee">
         < property  name="id" value="10060"></ property >
         < property  name="name" value="脑残粉"></ property >
         < property  name="sex" value="女"></ property >
         < property  name="car" ref="car"></ property >
     </ bean >
     < bean  id="car" class="com.zhiqi.entity.Car">
         < property  name="name" value="别克"></ property >
     </ bean >

  

一辆车只属于某员工,内部bean

< bean  id="employee" class="com.zhiqi.entity.Employee">
         < property  name="id" value="10060"></ property >
         < property  name="name" value="脑残粉"></ property >
         < property  name="sex" value="女"></ property >
         < property  name="car">
             < bean  class="com.zhiqi.entity.Car">
                 < property  name="name" value="雪佛兰"></ property >
             </ bean >
         </ property >
     </ bean >

  

 

有一个员工没有车

< bean  id="employee" class="com.zhiqi.entity.Employee">
         < property  name="id" value="10060"></ property >
         < property  name="name" value="脑残粉"></ property >
         < property  name="sex" value="女"></ property >
         < property  name="car">
             < null ></ null >
         </ property >
     </ bean >

  

 级联

< bean  id="employee" class="com.zhiqi.entity.Employee">
         < property  name="id" value="10060"></ property >
         < property  name="name" value="脑残粉"></ property >
         < property  name="sex" value="女"></ property >
         < property  name="car.name" value="好车"></ property >
     </ bean >

  此时在Car中new一个

一个员工有多个girlFriend

private  int  id;
     private  String name;
     private  String sex;
     private  Car car;
     private  List<String> girlFriend= new  ArrayList<String>();

  

<? 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="employee" class="com.zhiqi.entity.Employee">
         < property  name="id" value="10060"></ property >
         < property  name="name" value="脑残粉"></ property >
         < property  name="sex" value="女"></ property >
         < property  name="car" value="宾利"></ property >
         < property  name="girlFriend">
             < list >
                 < value >琪琪</ value >
                 < value >丽丽</ value >
                 < value >小莫</ value >
             </ list >
         </ property >
     </ bean >
 
</ beans >

  

一个员工有多套房子

private Set<String> house=new HashSet<String>();

<?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= "employee"  class = "com.zhiqi.entity.Employee" >
         <property name= "id"  value= "10060" ></property>
         <property name= "name"  value= "脑残粉" ></property>
         <property name= "sex"  value= "女" ></property>
         <property name= "car"  value= "宾利" ></property>
         <property name= "girlFriend" >
             <list>
                 <value>琪琪</value>
                 <value>丽丽</value>
                 <value>小莫</value>
             </list>
         </property>
         <property name= "house" >
             <set>
                 <value>房子 1 </value>
                 <value>别墅 2 </value>
             </set>
         </property>
     </bean>
 
</beans>

  一个员工的工作

<? 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="employee" class="com.zhiqi.entity.Employee">
         < property  name="id" value="10060"></ property >
         < property  name="name" value="脑残粉"></ property >
         < property  name="sex" value="女"></ property >
         < property  name="car" value="宾利"></ property >
         < property  name="girlFriend">
             < list >
                 < value >琪琪</ value >
                 < value >丽丽</ value >
                 < value >小莫</ value >
             </ list >
         </ property >
         < property  name="house">
             < set >
                 < value >房子1</ value >
                 < value >别墅2</ value >
             </ set >
         </ property >
         < property  name="works">
             < map >
                 < entry >
                     < key >< value >上午</ value ></ key >
                     < value >撸代码</ value >
                 </ entry >
                 < entry >
                     < key >< value >下午</ value ></ key >
                     < value >找BUG</ value >
                 </ entry >
             </ map >
         </ property >
     </ bean >
 
</ beans >

  

package  com.zhiqi.test;
 
import  java.util.Iterator;
 
import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
 
import  com.zhiqi.entity.Employee;
 
public  class  T {
 
     public  static  void  main(String[] args) {
         ApplicationContext ac= new  ClassPathXmlApplicationContext( "beans.xml" );
         Employee employee=(Employee)ac.getBean( "employee" );
         for (String str:employee.getHouse()){
             System.out.println(str);
         }
         //entrySet()将map转为set,然后迭代器遍历
         Iterator it=employee.getWorks().entrySet().iterator();
         while (it.hasNext()){
             System.out.println(it.next());
         }
     }
}
  •   
发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Struts文件上传详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。