Spring核心技术之IOC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39469809/article/details/78508121

一、Spring应用的配置:、Spring用环境的配置:
 1.在/项目名/src/main/resources中添加Spring的配置文件:
applicationContext.xml

 2.在Spring配置文件中用<bean>标记来装配一个Bean

 3.在<Bean>里面写ref有三个点:<1>属性:<Propety ref="">,如果多个文件都有引用,那就找全局

                              <2>标签:<ref>引用的是实体对象:Bean  Local(已废弃)  Parent

                              <3><idref>引用的是实体对象的字符串的值,类似Value

二、IoC容器( IOC的别名:依赖注入(DI)):
 1. IoC概念:反向控制、控制反转(inversion of control)。对象不需要主动去查找依赖类的实例。而是由其它应用给它注入。
 2. Spring对IoC的支持:Spring 提供了BeanFactoryApplicationContext这两种IoC容器,来帮助你管理Bean、Bean之间的依赖关系以及Bean的生命周期。

三、Spring中IoC:
 1. Bean装配:在Spring配置文件中用<bean>标记来装配一个Bean.
    <bean id="Bean在Spring容器中的唯一标识" class="Bean类的全限定名">...</bean>

 2. 用setter方法注入它的依赖类:
    1) 在Bean中针对依赖类属性添加一个setter方法。
    2) 在Bean的配置中通过<bean>标记的子标记<property>来注入这个属性。注入的可以是值,也可是容器中另一个Bean的引用。
    <bean id="..." class="...">
       <property name="属性名" value="值" />
       <property name="属性名" ref="另一个bean的标识" />
    </bean>

 3. 用构造器注入<Constructor-arg>它的依赖类

 4. 指定bean的生存范围:<bean>标记有一个scope属性来指定:
   1) sigleton:一个Spring容器一个实例(默认值)
   2) prototype:使用一次就创建一个实例
   3) request、session、global-session :在Web ApplicationContext中才有效。

 5. 指定Bean的初始化和销毁: 使用<bean>标记的以下两个属性:
  1) init-method //初始化默认调用的方法
  2) destroy-method  //销毁

 6.<bean>的Scope属性:1.默认对象为单列模式  2.Scope="Prototype",设置为原型模式

、创建一个包com.qiung.entity

    创建实体类Card部分代码如下:

 package com.qiung.entity;


  public class Card {


private int cid;
private int cnum;

public Card() {
super();
}


public Card(int cnum) {
super();
this.cnum = cnum;
}


public Card(int cid, int cnum) {
super();
this.cid = cid;
this.cnum = cnum;
}

public int getCid() {
return cid;
}

public void setCid(int cid) {
this.cid = cid;
}

public int getCnum() {
return cnum;
}

public void setCnum(int cnum) {
this.cnum = cnum;
}
}


 创建实体类Person部分代码如下:

  package com.qiung.entity;
     import java.util.List;
     import java.util.Map;

    public class Person {

private int pid; //编号id

private String pname; //名字
private int page; //年龄
private List<String> hobbies; //定义list集合
private Card card;  //card类的编号id
private Map<String, Card> map; //定义map集合

public Map<String, Card> getMap() {
return map;
}

public void setMap(Map<String, Card> map) {
this.map = map;
}

public Card getCard() {
return card;
}

public void setCard(Card card) {
this.card = card;
}

public List<String> getHobbies() {
return hobbies;
}

public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}

public Person() {
super();
System.out.println("person的构造方法");
}


public Person(String pname, int page) {
super();
this.pname = pname;
this.page = page;
}

public Person(int pid, String pname, int page) {
super();
this.pid = pid;
this.pname = pname;
this.page = page;
}

public int getPid() {
return pid;
}

public void setPid(int pid) {
this.pid = pid;
}

public String getPname() {
return pname;
}

public void setPname(String pname) {
this.pname = pname;
}

public int getPage() {
return page;
}

public void setPage(int page) {
this.page = page;
}
}


、创建一个包,在创建一个配置文件名:applicationContext.xml,里面代码如下:

<?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">
<!-- 配置Person对象 -->
<bean id="person" class="com.zking.entity.Person">
    <!-- 注入:设值 -->
    <!-- set注入 -->
    <property name="pid" value="5"></property>
    <property name="pname" value="小仙女"></property>
    <property name="page" value="15"></property>
    <property name="hobbies">
<list>
      <value><![CDATA[<小仙女>]]></value>
      <value>清明雨上</value>
      <value>尽头</value>
</list>
    </property>
<!-- 注入对象 -->
<property name="card" ref="card"></property>


<!-- 注入map集合 -->
<property name="map">
<map>
     <entry key="23" value-ref="card"></entry>
</map>
</property>

<!-- 构造注入:设值 -->
<!-- <constructor-arg value="1"></constructor-arg> <constructor-arg value="张云">     </constructor-arg> 
     <constructor-arg value="29"></constructor-arg> -->
</bean>

<!--设值Card对象 -->
<bean id="card" class="com.zking.entity.Card">
<!-- 注入设:设值 -->
<!-- set注入式 -->
<property name="cid" value="1"></property>
<property name="cnum" value="11111111"></property>
</bean>

    

、测试类代码如下:

 package com.qiung.test;
    import org.junit.Test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.core.io.ClassPathResource;
    import com.zking.entity.Phones;
    import com.zking.entity.Person;

  public class TestSpring {

@Test
public void teststring() {
    // 1.加载spring配置文件
    // 1.1 延迟加载(懒加载)
// BeanFactory bf=new XmlBeanFactory(new
// ClassPathResource("applicationContext.xml"));
// Person person=(Person) beanFactory.getBean("person");
// Person person=(Person) bf.getBean("person");
    // 及时加载
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
    // Person person=(Person) applicationContext.getBean("person");
    // System.out.println(person.getHobbies());
    // System.out.println(person.getCard().getCnum());

       Phones phones = (Phones)
       applicationContext.getBean("phones");
       System.out.println(phones.getPhone_system().get_Name() + " " +      phones.getPhone_screen().get_fices_Name() + " " +
       phones.getPhone_cpu().phones_CPU_Name());


}
}















猜你喜欢

转载自blog.csdn.net/qq_39469809/article/details/78508121