学习spring-day02

使用Spring

1 创建Maven Project,添加spring-webmvc依赖

2 复制applicationContext.xml(Spring的配置文件)到项目中的src\main\resources

3 配置applicationContext.xml

4 在程序中,声明AbstractApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"),再调用ac变量的getBean()方法即可获取对象,最后,还应该调用acclose()方法以释放资源。

Spring管理的对象

【理解】 作用域/单例

由Spring管理的对象默认情况下是单例的!也就是说,通过Spring反复获取同一个bean id的对象,都会是同一个对象!

在配置<bean>时,添加scope属性可以配置对象的作用域,当取值为singleton时表示单例,当取值为prototype时表示非单例。

如果是单例的,Spring会在加载配置文件时就创建对象,如果是非单例的,只会在getBean()时创建对象。

【了解】 懒加载

当Spring管理的对象是单例的,可以配置它是否是懒汉式的单例模式,也就是懒加载。

默认情况下,并不是懒加载的!

可以在<bean>节点中配置lazy-init="true"将其设置为懒加载的!

【理解】 生命周期

学习生命周期的目的在于了解某个类当被创建出来之后,会在哪些时候被调用哪些方法,并且,作为开发者,需要确定如何重写这些方法,使得重写的代码会在正确的时候被执行。

由Spring管理的那些单例的对象也是可以确定生命周期方法的!

具体的做法是自行在类中创建初始化方法和销毁方法,方法的名称可以自定义。然后,在Spring的配置文件中,在<bean>节点中添加init-method属性和destroy-method属性的配置,这2个属性的值都是自定义的方法的名称。

通过Spring为属性注入值

【理解】 通过SET方法注入值

在Spring的配置文件中,配置所需要创建对象的类,并配置需要注入值的<property>节点:

<bean
    id="userDao2"
    class="cn.tedu.spring.UserDao2" />

<!-- property节点:配置属性的值 -->
<!-- property > name: -->
<!-- property > ref:引用哪个bean作为这个属性的值 -->
<bean 
    id="userService"
    class="cn.tedu.spring.UserService">
    <property 
        name="userDao"
        ref="userDao2" />
</bean>

为需要注入值的属性添加set方法,这个方法可以通过Eclipse自动生成

注意:在Spring的配置文件中,注入值的节点的name属性的值,其实,应该是对应的属性的set方法名称,例如属性是userDao,set方法的名称是setUserDao,则配置的的name就是userDao,如果set方法的名称是setDao,则配置的的name就必须是dao。因为Spring的工作原理是基于的name属性值,获取到set方法的名称,然后调用set方法为属性注入值的!

【了解】 通过构造方法注入值

使用这种方式注入值之前,必须在类中声明为属性赋值的构造方法:

public UserController(
        UserService userService) {
    super();
    this.userService = userService;
}

然后,在<bean>节点下,添加<constructor-arg>节点以配置构造方法的参数:

<bean
    id="userController"
    class="cn.tedu.spring.UserController">
    <!-- index:参数的序号,从0开始编号 -->
    <constructor-arg 
        index="0"
        ref="userService" />
</bean>

关于value和ref

在配置属性的值时,如果属性的值是基本类型或String类型,则使用value属性来配置,如果属性的值是其它对象型的数据,并且已经在Spring配置,则使用ref属性来配置。

在配置value时,还可以指定数据类型:

<property name="age">
    <value type="int">23</value>
</property>

还可以为某个String类型的属性注入""(空字符串)甚至null(空值),但是,没什么意义。

小结:如果需要注入值的是基本类型或String,则在节点上配置name和value属性即可。

【了解】 注入List属性的值

<property name="listData">
    <list>
        <value>Alex</value>
        <value>David</value>
        <value>Lucy</value>
    </list>
</property>

【了解】 注入Set属性的值

<property name="unorderedData">
    <set>
        <value>Beijing</value>
        <value>Shanghai</value>
        <value>Guangzhou</value>
    </set>
</property>

【了解】 注入Map属性的值

<property name="session">
    <map>
        <entry key="username" value="admin" />
        <entry key="password" value="123456" />
        <entry key="group" value="administrator" />
    </map>
</property>

【理解】 注入Properties属性的值

使用<util:properties>节点就可以直接读取.properties类型的配置文件:

<!-- util:properties用于读取.properties配置文件 -->
<!-- util:properties节点的本质也是一个bean节点 -->
<!-- id:bean id -->
<!-- location:配置文件的路径,以classpath:作为前缀 -->
<util:properties
    id="dbConfig"
    location="classpath:db.properties" />

然后,在为属性注入时,参考注入对象型的值的做法即可:

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

关于ArrayList和LinkedList

ArrayList的特点:查询效率高,修改效率低

LinkedList的特点:查询效率低,修改效率高

遍历Map

调用Map对象的keySet()方法,得到这个Map的所有的Key的Set集合,然后,再使用增强for循环或迭代器遍历这个Set集合,在遍历过程中,调用Map对象的get(? key)方法获取对应的Value。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值