spring学习-2 Bean的装配

2 篇文章 0 订阅

Spring 支持 3 种依赖注入的方式
属性注入
构造方法注入
工厂方法注入

属性注入:
属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象
属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值
属性注入是实际应用中最常用的注入方式
注意:类必须具有显式或隐式的无参构造方法
Bean的名称可以使用id或者name,同一个Bean中id和name可以一样,也可以不一样,但是不同Bean的id和name不能重复

    <bean id="s1" name="s1" class="com.han.vo.Student"> 
        <property name="id" value="1"></property>
        <property name="name">
            <value>韩少斌</value>
        </property>
        <property name="phone">
            <value>4567890</value>
        </property>
    </bean> 

构造方法注入:
通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
构造器注入在 <constructor-arg > 元素里声明属性

index属性用来标识是第几个参数的,默认可以不写,按照构造方法的参数顺序
type属性用来标识该参数的类型,一般也不用写,在遇到有参数个数相同的构造方法时使用

    <bean id="s2" class="com.han.vo.Student"> 
        <constructor-arg value="2" index="0" type="int"></constructor-arg>
        <constructor-arg index="2" type="String">
            <value>57890986</value>
        </constructor-arg>
        <constructor-arg index="1">
            <value>尼古拉斯-赵四</value>
        </constructor-arg>
    </bean>  

工厂注入:
工厂注入分为静态工厂和实例工厂
这里写图片描述

dog为静态工厂注入,class属性指定工厂类,factiory-method指定返回实例的方法

cat为实例工厂注入,首先要配置实例工厂类的Bean,配置cat Bean时,用factory-bean来指定工厂Bean,仍然使用factory-method指定返回实例的方法

这里写图片描述

引用其它Bean
在注入时,若属性是其他Bean,则可以通过 <ref> 元素或 ref 属性为 Bean 的属性或构造方法参数指定对 Bean 的引用.

    <bean id="teacher" name="teacher0"  class="com.han.vo.Teacher">
        <property name="name" value="韩少斌"></property>
        <property name="student" ref="s1"></property>
    </bean>
    <bean id="teacher0" name="teacher0"  class="com.han.vo.Teacher">
        <property name="name" value="韩少斌"></property>
        <property name="student">
            <ref bean="s1"/>
        </property>
    </bean>

内部 Bean
当 Bean 实例仅仅给一个特定的属性使用时, 可以将其声明为内部 Bean. 内部 Bean 声明直接包含在 <property> 或 <constructor-arg> 元素里, 不需要设置任何 id 或 name 属性
内部 Bean 不能在任何其他地方使用

    <bean id="teacher1" name="teacher1"  class="com.han.vo.Teacher">
        <property name="name" value="韩少斌"></property>
        <property name="student">
            <bean id="liyuanpeng" class="com.han.vo.Student">
                <property name="id" value="3"></property>
                <property name="name" value="李元鹏"></property>
                <property name="phone" value="110"></property>
            </bean>
        </property>
    </bean>

集合属性:

在 Spring中可以通过一组内置的 xml 标签(例如: <list>, <set> 或 <map>) 来配置集合属性.
配置 java.util.List 类型的属性, 需要指定 <list> 标签, 在标签里包含一些元素. 这些标签可以通过 <value> 指定简单的常量值, 通过 <ref> 指定对其他 Bean 的引用.
数组的定义和 List 一样, 都使用<list>

配置 java.util.Set 需要使用 <set> 标签, 定义元素的方法与 List 一样.

Java.util.Map 通过 <map> 标签定义, <map> 标签里可以使用多个 <entry> 作为子标签. 每个条目包含一个键和一个值.
必须在 <key> 标签里定义键,因为键和值的类型没有限制, 所以可以自由地为它们指定 <value>, <ref>, <bean> 或 <null> 元素.
可以将 Map 的键和值作为 <entry> 的属性定义: 简单常量使用 key 和 value 来定义; Bean 引用通过 key-ref 和 value-ref 属性定义
使用 <props> 定义 java.util.Properties, 该标签使用多个 <prop> 作为子标签. 每个 <prop> 标签必须定义 key 属性.

    <bean name="manager" class="com.han.vo.Manager">
        <property name="name" value="饲养员"></property>
        <property name="students">
            <list>
                <ref bean="s1"/>
                <ref bean="s2"/>
                <ref bean="s3"/>
                <bean class="com.han.vo.Student">
                    <property name="id" value="4"></property>
                    <property name="name" value="苏艳"></property>
                    <property name="phone" value="114"></property>
                </bean>
            </list>
        </property>
        <property name="teachers">
            <set>
                <ref bean="teacher0"/>
                <ref bean="teacher1"/>
                <ref bean="teacher2"/>
                <ref bean="teacher3"/>

            </set>
        </property>
        <property name="ms">
            <map>
                <entry key="student1" value-ref="s1"></entry>
                <entry key="student2" value-ref="s2"></entry>
                <entry key="student3" value-ref="s3"></entry>
            </map>
        </property>

        <property name="properties">
            <props>
                <prop key="driverClass">com.mysql.jdbc.Driver</prop>
                <prop key="url">jdbc:mysql://localhost:3306/mybd</prop>
                <prop key="user">root</prop>
                <prop key="password">************</prop>
            </props>
        </property>
    </bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 图书管理系统说明V2.0 ### 项目介绍及再版说明(2016-01-24) 其实一开始做这个小项目在2014年的9到11月,当时是作为加入Pureweber开发组的大作业完成的。虽然用了两个月的时间,但是做出的东西还是有很多的缺陷。前些日子在整理GitHub时又想起来了这个项目,记得曾经还在Django中国社区里安利初学者来读代码什么的。但是想想里面还有很多不规范的代码和一些很糟糕的写法就感觉很蛋疼。本来想直接删除了好了,但是后来想想,何不花点时间把这个小项目重构一下,就可以给以后学习Django的同学一个完整的项目参考,就可以代替了一般培训课程或者老师上课PPT里那种陈旧或者不完整的例子。 于是一共花费了大约两天时间对项目进行了重构,主要做了以下方面的工作: * 将Django的版本更新到了最新的1.9.1。 * 修改了原先项目中不规范的格式、变量名等。 * 更改了项目的目录结构,换成了Django官方推荐的目录结构模式。 * 将原来缺失的文件上传保存部分补充完整了。 * 更改了用户部分的代码,将原来手动设置session的方式去掉了,替换为Django用户模块默认的登录态保存方式. * 修复了注册用户时用户提交空密码可能造成的安全漏洞。 * 做了对python3的支持。改动不多。 ### 项目所涉及的和Django相关的功能 项目的目的是为了给Django的初学者一个完整项目的参考案例,所以尽可能多的选择了初学者常用的方法处理一些问题,比如在视图的处理上选择了视图处理函数,而不是更好用的视图处理类。在参数传递上只使用了标准的POST和GET的方式传参,而没有使用url地址中提取参数的办法。该项目中主要涉及到的Django框架相关的内容有: * Models模型字段用法,外键关系用法。 [文档](https://docs.djangoproject.com/en/1.9/topics/db/models/) * 使用ORM进行数据库查询。 [文档](https://docs.djangoproject.com/en/1.9/topics/db/queries/) * Urls配置文件的写法,Urls命名与反向查询。 [文档](https://docs.djangoproject.com/en/1.9/topics/http/urls/) * Views视图处理函数。 [文档](https://docs.djangoproject.com/en/1.9/topics/http/views/) * Templates模板。 [文档](https://docs.djangoproject.com/en/1.9/ref/templates/language/) * 在admin站点中注册模型。 [文档](https://docs.djangoproject.com/en/1.9/ref/contrib/admin/) * Django自带用户模块的注册和登录。 [文档](https://docs.djangoproject.com/en/1.9/topics/auth/default/) * 对Django自带的用户模块进行拓展。 [文档](https://docs.djangoproject.com/en/1.9/topics/auth/customizing/) * 静态文件处理。 [文档](https://docs.djangoproject.com/en/1.9/ref/contrib/staticfiles/) * 还有一大堆其他的…… ### 系统说明 * 本系统使用PythonDjango框架搭建。 * 前端部分使用bootstrap。 ### 运行说明 * 请参考Django官方文档[下载](https://www.djangoproject.com/download/)Django1.711.9.1版。 * 请按照Django官方文档[安装](https://docs.djangoproject.com/en/1.9/intro/install/)Django。 * 如果是水果电脑。。。请额外安装[PIL](http://www.pythonware.com/products/pil/)库。 * 通过终端进入项目文件夹。 * 在终端中执行`python manage.py runserver`命令即可运行本地开发服务器。 * 在浏览器里访问`http://127.0.0.1:8000`即可查看该网站。 ### 功能实现 * 实现了用户权限相关的基本操作(注册、登陆、修改密码、注销) * 实现了用户分级(普通用户与管理员用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值