Spring的Bean管理

第一种管理bean的方式:xml

bean实例化的方式

1、在spring里面通过配置文件创建对象

2、bean实例化三种方式实现

第一种:使用类的无参数构造创建(重点)

类默认是无参数构造,写了含参数构造后需要声明无参数构造

<bean id="user" class="x.y.User"></bean>

第二种:使用静态工厂(静态方法)创建

普通类:

public class Bean2{

    public void add(){

        system.out.println("add.....");

    }

}

工厂类:

public class Bean2Factory{

     public static Bean2 getBean2(){

        return new Bean2();

     }

}

xml中bean的书写:

<bean id="bean2" class="x.y.Bean2Factory" factory-method="getBean2"></bean>

第三种:使用实例工厂(普通方法)创建

普通类:

public class Bean3{

    public void add(){

        system.out.println("add.....");

    }

}

工厂类:

public class Bean3Factory{

    public Bean3 getBean3(){

        return new Bean3();

    }

}

xml中bean的书写:

<bean id="bean3Factory" class="x.y.Bean3Factory"></bean>

<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>

bean标签常用属性

1、id属性(理论上可以为任意名字,但不能包含特殊字符)

根据id值得到配置对象

2、class属性(创建对象所在类的全路径)

3、name属性(功能和id属性一样的,id属性值不能包含特殊字符,name属性值中可以包含特殊字符)

4、scope属性(Bean的作用域)

.singleton 单例(每次创建都是一个对象)

.prototype 多例(每次创建都生成新的对象)

.request (创建的对象放在request域中)

.session (创建的对象放在session域中)

.globalSession (创建的对象放在globalSession域中):全局会话,一次登录可以在所有的产品中使用,例如单点登录

属性注入

1、创建对象时,向类里面的属性中设置值

2、属性的注入方式介绍(三种方式)

第一种:使用set方式注入

第二种:使用有参数构造注入

第三种:使用接口注入

3、spring中属性注入方式仅支持前两种

第一种:使用set方式注入(最常用)

普通类:

public class PropertiesDemo2{

    private String username;

    public void setUsername(String name){

        this.username = name;

    }

}

xml中的书写:

<bean id="propertiesDemo2" class="x.y.PropertiesDemo2">

    <!--注入属性值

    name:类里面定义的属性名称

    value:设置具体的值

    -->

    <property name="username" value="小王"></property>

</bean>

第二种:使用有参数构造注入

普通类:

public class PropertiesDemo1{

    private String username;

    public propertiesDemo1(String name){

        this.username = name;

    }

}

xml中的书写:

<bean id="demo1" class="x.y.PropertiesDemo1">

    <constructor-arg name="username" value="小马"></constructor-arg>

</bean>

注入对象类型属性(重点)

1、创建service类和dao类,在service中得到dao对象

2、具体实现过程

(1)在service中把dao作为类型属性

(2)生成dao类型属性的service方法

普通类:

public class Dao{

    public void add(){

        system.out.println("dao");

    }

}

public class Service{

   private Dao dao;

   public void setDao(Dao dao){

      this.dao = dao

   }

   public void add(){

      system.out.println("service");

      dao.add();

   }

}

xml书写:

<bean id="dao" class="x.y.Dao"></bean>

<bean id="service" class="x.y.Service">

    <!-- name:类中的属性名称 ref:引用的对象的id值 -->

    <property name="dao" ref="dao"></property>

</bean>

p名称空间注入

参考:https://www.cnblogs.com/Smile-123/p/5993599.html

注入复杂类型属性

.数组类型

.list类型

.map类型

.properties类型

普通类:

public class Person {
    private String[] arrayStr;
    private List<String> list;
    private Map<String,String> map;
    private Properties properties;

    public void setArrayStr(String[] arrayStr) {
        this.arrayStr = arrayStr;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public void setMap(Map<String, String> map) {
        this.map = map;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
}

xml书写:

<bean id="person" class="x.y.Person">

    <!-- 数组 -->

    <property name="arrayStr">

        <list>

           <value>小王</value>

           <value>小李</value>

           <value>小马</value>

        </list>

    </property>

    <!-- list -->

    <property name="arrayStr">

        <list>

           <value>小张</value>

           <value>小孙</value>

           <value>小郑</value>

        </list>

    </property>

    <property name="map">

        <map>

            <Entry key="aa" value="Lucy"></Entry>

            <Entry key="bb" value="Damo"></Entry>

            <Entry key="cc" value="John"></Entry>

        </map>

    </property>

    <property name="properties">

       <props>

          <prop key="driverclass">com.mysql.jdbc.Driver</prop>

          <property key="username">root</property>

       </props>

    </property>

</bean>

IOC和DI的区别

spring整合Web项目原理

1、加载spring核心配置文件

ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

此语句是new方式创建对象,功能实现,效率很低

2、解决上述问题的实现思想:把加载配置文件和创建对象的过程,在服务器启动的时候完成。

3、解决上述问题的实现原理

用到的技术:

(1)servletContext对象

(2)监听器(servletContextListener

具体使用:

.在服务器启动的时候,为每个项目创建一个servletContext对象

.在servletContext对象创建的时候,使用监听器监听到servletContext对象的创建时间,此时加载

spring核心配置文件,同时实现配置文件的配置对象创建,把创建出来的对象放到

servletContext域对象里面(setAttribute方法),获取对象的时候从servletContext域中得到(getAttribute方法)

第二种管理Bean的方式:注解

注解

1、代码里面的特殊标记,使用注解可以完成功能

2、注解写法:@注解名称(属性名称=属性值)

3、注解可以使用在类上面、属性上面、方法

spring注解准备工作

1、导入jar包

(1)导入基本的jar包(见:http://blog.csdn.net/mameng1988/article/details/78987619

(2)导入aop的jar包(spring-aop-4.3.9.RELEASE.jar)

2、创建类、方法

3、创建spring核心配置文件,引入约束

(1)IOC基本功能时引入约束beans

(2)做spring的ioc注解开发,引入新的约束context

4、开启注解扫描

在spring核心配置文件xml中书写:

<!-- 开启注解扫描(最常用)到包里面扫面类、方法、属性上面是否有注解 -->

<context:component-scan base-package="x.y" ></context:component-scan>

<!-- 仅扫面属性上面的注解 -->

<context:annotation-config></context:annotation-config>

注解创建对象

1、在需要创建对象的类上面使用注解实现

2、创建对象有四个注解

spring中提供@Component的三个衍生注解(功能目前来讲是一致的)

.@Controller :Web层

.@Service :业务层

.@Repository :持久层

这三个注解是为了让标注类本身的用途清晰,spring在后续版本会对其增强

3、创建对象是单例还是多例(默认是单例)

 

注解注入属性

1、创建service类,创建dao类,在service中得到dao对象

(1)创建dao和service对象

(2)在service类里面定义dao类型属性

注入属性的第一个注解@Autowired:根据类名找到类对应的对象

注入属性的第二个注解@Resource(name="userDao")

 

配置文件和注解混合使用

 

1、创建对象操作使用配置文件方式实现

2、注入属性的操作使用注解的方式实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值