码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 的IOC 和Aop

时间:2016-09-29 20:35:46      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

                                                  Spring 的IOC 和Aop

 

 

在ApplicationContext.xml中,bean的scope属性默认是singleton,即默认是单例

Spring容器创建的时候,会将所有的配置的bean对象创建,默认bean都是单例的,

代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构造器,创建实例对象

bean的作用域

scope=“prototype” 原型模型(N个对象),真正使用时才会创建,没获取一次,都会创建不同的对象

scopr="singleton" 单例模式:容器初始化时就会初始化所有的bean对象,,每次获取的都是同一个对象,默认值

多种方式实现依赖注入

设置注入

<bean id="user3" class="cn.hmy.bean.User">
       <property name="username ">
         <value><![CDATA[P&g]]></value>
       </property>
     </bean> 

构造注入

注意:

1、一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。

2、通过<constructor-arg>元素的index 属性可以指定该参数的位置索引,位置从0 开始。

3、<constructor-arg>元素还提供了type 属性用来指定参数的类型,避免字符串和基本数据类型的混淆。

<bean id="user" class="cn.hmy.bean.User" scope="prototype">
      <constructor-arg index="0" type="java.lang.String" value="lxl"/>
      <constructor-arg index="1" type="java.lang.String" value="lxl@163.com"/>
      <constructor-arg index="2" type="cn.hmy.bean.Car" ref="car"></constructor-arg>
    </bean>

技术分享

 

p命名空间注入

xmlns:p="http://www.springframework.org/schema/p"
....
<!--
p命名空间注入 --> <bean id="user2" class="cn.hmy.bean.User" p:username="张嘎" p:password="123"/>

c命名空间的注入

 xmlns:c="http://www.springframework.org/schema/c"


<!--c命名空间注入  -->
    <bean id="user5" class="cn.hmy.bean.User" c:car-ref="car" c:username="岁月静好" c:password="123"/>

引用其他bean组件

<!--引用其他的Bean组件   即给域属性的赋值-->
     <bean id="car" class="cn.hmy.bean.Car">
       <property name="color" value="白色"/>
     </bean>
     
     <bean id="user4" class="cn.hmy.bean.User">
       <property name="car" ref="car"/>
     </bean>

注入不同数据类型

 <!-- 注入集合类型的属性 -->
     <!-- 注入list类型的属性 -->
     <bean id="collectionBean1" class="cn.hmy.bean.CollectionBean">
       <property name="names">
         <list>
            <value>张三</value>
            <value>李四</value>     
         </list>
       </property>
     </bean>
     
     <!--注入set类型的属性  -->
     <bean id="collectionBean2" class="cn.hmy.bean.CollectionBean">
       <property name="address">
         <set>
            <value>张三2</value>
            <value>李四2</value>
         </set>
       </property>
     </bean>
     

     <!--注入map类型的属性  -->
     <bean id="collectionBean4" class="cn.hmy.bean.CollectionBean">
       <property name="map">
         <map>
          <entry>
            <key><value>football</value></key>
            <value>足球</value>
          </entry>
         </map>
       </property>
       </bean>
     
     <!--注入properties类型的属性  -->
     <bean id="collectionBean5" class="cn.hmy.bean.CollectionBean">
       <property name="pro">
         <props>
           <prop key="basketball">篮球</prop>
         </props>
         
       </property>
     
     </bean>
  
     <!--给数组注入值  -->
    <bean id="collectionBean6" class="cn.hmy.bean.CollectionBean">
      <property name="strs">
        <list>
          <value>神奇</value>
          <value>神奇</value>
          <value>神奇</value>
        </list>
      </property>
    </bean>

使用注解实现注入

package cn.hmy.bean;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

//@Component("info")  不分层
//@Repository("info") dao
//@Controller("info") action
@Service("info")   // biz
public class User {

    @Value("岁月静好")  //普通属性
    private String username; // 用户名
    @Value("123")
    private String age; // 密码
    //@Resource  域属性
    @Autowired //域属性
    private Car myCar;

    public Car getMyCar() {
        return myCar;
    }
    
    @Override
    public String toString() {
        return "User [username=" + username + ", age=" + age + ", myCar="
                + myCar + "]";
    }

    public void setMyCar(Car myCar) {
        this.myCar = myCar;
    }
    public User() {
        System.out.println("init user");
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    
    
    
}

 

<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->

   <context:component-scan base-package="cn.hmy.bean"/>
   
     
</beans> 

 

package cn.hmy.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Car {
   
    @Value("白色")
    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Car [color=" + color + "]";
    }
    
    
}

 

Spring 的IOC 和Aop

标签:

原文地址:http://www.cnblogs.com/hmy-1365/p/5920696.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!