spring基础部分(三)&bean管理

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

spring的bean管理(xml方式)
Bean实例化的三种方式

Bean实例化的方式

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

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

第一种 使用类的无参构造创建
        <bean id="" class="" ></bean> 默认是无参构造
        类里面没有无参的构造器,出现异常
        No  default constructor found
    第二种 使用静态工厂创建
        1)创建静态的方法,返回类对象
             public class BeanFactory(){
                public static Bean2 getBean2(){
                    return new Bean();
                }

            }   

        配置文件
        <bean id="bean" class="路径" factory-method=“getBean2”></bean>        

    第三种使用实例工厂创建
        1)创建不是静态的方法,返回类对象
        public class BeanFactory(){
                public  Bean3  getBean3(){
                    return new Bean3();
                }

            }
        配置文件
        先创建工厂对象
        <bean id="BeanFactory" class="路径"></bean>
        <bean id="bean2" factory-bean="BeanFactory" factory-method=“getBean3”></bean>

Bean标签属性的介绍

1) id 属性 起名称 id属性值名称任意命名
id 属性值 不能包含特殊符号
根据 id值得到配置对象
2) class 属性 创建对象所在类的全路径

3) name属性 功能和id属性功能一样 id属性值不能包含特殊符号
但是在name属性值里面可以有包含特殊符号。

4) scope 属性 Bean的作用范围
singleton 默认值 单例的
scope=“singleton”
ioc.User@1be3a66
ioc.User@1be3a66

prototype 多例的
ioc.User@1be3a66
ioc.User@dbnenii45  

request web项目中 spring 创建一个Bean的对象 将对象存入到request域中

session web项目中 spring创建一个Bean的对象 将对象存入到session域中

globalSession web项目中 应用在Porlet环境 如果没有Prolet环境那么globalSession相当于session

Bean属性注入

1.创建对象时候,向类里面属性设置值
2.属性注入方式的介绍(三种方式)
1)使用set方法注入

<bean id="book"  class="类全路径" >
        《!-注入属性值
            name属性值 类里面定义的属性名称
            value属性 设置具体的值      
        -》
        <property name="bookname" value="java编程原理' ></property>
    </bean>

2)使用有参数构造注入

    配置文件
    <bean id="" class=""  >
    有参的构造
    name有参构造中的属性

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

3)使用接口注入

3在spring框架里面 支持前俩种方式
1)set方法注入(**)
2)有参数构造注入

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

public class UserSercive{
    public void add(){
        在sercive里面 得到dao类对象,才能调用dao里面的方法
        UserDao dao=new UserDao();
        dao.add();
    }

}

修改以后

public class UserSercive{
    1.定义一个dao类型属性
    2.生成set方法
    private UserDao userDao;
    public void setUserService(UserDao userDao){
        this.userDao=userDao;
    }
    public void add(){
        userDao.add();
    }

}

1创建service类和dao类
(1)在service得到dao对象
2.具体实现过程
(1)在service里面把dao作为类型属性
(2)生成dao类型属性的set方法

3.配置文件中的注入

《!---注入对象属性配置--》1.配置service和dao对象--》
    《dao注入》
    <bean id="userDao" class="类全路径"></bean>

    <bean id="userService"  class="类全路径" >
        《!-注入dao类
            name属性值 service类里面属性名称
                    现在不能写value属性 刚才是字符串 现在是对象
            写ref属性  dao配置bean标签中id值 
        -》
        <property name="userDao" ref="userDao' ></property>
    </bean>     
    执行 public voidtestUser(){
        1.加载spring配置文件 根据创建对象
        ApplicationContext context=
                new ClassPathXmlApplicationContext("bean1.xml");
        2.得到配置创建的对象
            UserService userService=(UserService)   context.getBean("userService");
            userService.add();
    }

P名称空间注入
xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:p=”http://www.springframework.org/schema/p” //P的命名空间
xsi:schemaLocation=”
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd“>

实现类

public classPerson{
    private String pname;
    public void setPname(String panme){
        this.panme=panme;
    }   
    public void test(){
        System.out.println();
    }
}
<!--P名称空间注入-->
<bean id="person" class="全路径" p:panme="kkk"></bean> 

复杂的类型的属性

1.数组

2.list集合
3map集合
4.properties类型
<bean id="person" class="全路径" p:panme="kkk">
    <数组类型>
    <property name="arrs"  >
        <list>
            <value>1</value>
        </list> 
    </property>

    <list>

    <property name="lis"  >
        <list>
            <value>1</value>
            <value>2</value>
        </list> 
    </property>

    <map>
    <property name="map"  >
        <map>
            <entry key="" value=""></entry>
        </map>  
    </property>

    <properties>

    <property name="properties"  >
        <props>
            <prop key="driverclass" >com.mysql.jdbc.Driver</prop>
            <prop key="userName" >root</prop>

        </lprops>           
    </property>
</bean> 

IOC与DI的区别

(1)IOC:控制反转,把对象交给spring进行配置
(2)DI: 依赖注入:向类里面的属性中设置值
(3)关系:“
依赖注入不能单独存在,需要在IOC基础之上来完成操作。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试