Spring配置详解

Spring配置详解

1.     配置bean元素 基本属性

<!--
        配置bean元素
        name:给对象起个名字
        class 类的完整路径
        id  唯一   里面不初选特殊字符 struts“/sadfAction” ·
        -->
        <bean name="user" class="cn.hd.test.User" id="user"></bean>

2.创建方式

<!--scope对象的创建方式
           singleton 单例模式(默认)
        prototype   多例模式(什么时候用什么时候创建 并且创建的方式每次重新new )
        
        了解  不用
        request  web环境下 对象的生命周期和request一样
        session  web环境下 对象的生命周期和session一样
        -->

一般情况下全都用默认的

多例模式 在整合struts2的时候必须用多例模式

3.创建生命周期的方法

在对象创建后马上就执行一个方法,对象销毁前执行一个方法

<bean name="user" class="cn.hd.test.User" id="user" init-method="init" destroy-method="destroy"></bean>

在这个user类中 书写init和destroy方法

测试,可以手动的去销毁对象  调用ClassPathXmlApplicationContext的close
注意:销毁对象 对象必须是单例的 如果是多里的无法手动销毁
4.Spring创建对象的方式

(1)无参数的构造函数(重点使用)
(2)静态工厂实例化
<bean name="userFactory" class="cn.hd.test.UserFactory" factory-method="createUser"></bean>

并且创建一个UserFactory该类中提供一个静态createUser


public static User createUser(){
        System.out.println("调用了静态工厂");
        return new User();
    }
(1)实例化工厂创建
<bean name="userFactory1" class="cn.hd.test.UserFactory"></bean>
<bean name="user1" factory-bean="userFactory1" factory-method="createUser1"></bean>


public User createUser1(){
        System.out.println("实例化工厂");
        return new User();
}

对象属性的注入

(1)     get-set注入(最重要的)

基本属性  8打基础类型

<bean name="car" class="cn.hd.injection.Car">
             <property name="name" value="小鸟电动车"></property>
             <property name="color" value="红色"></property>

         </bean>

name  类属性名  value属性值

 

 

引用属性  对象


<bean name="user" class="cn.hd.injection.User">
                 <property name="name" value="赵塞昌"></property>
                 <property name="age" value="13"></property>
                 <property name="car" ref="car"></property>
         </bean>

name 类的属性名   ref 引用的bean 的name

(2)     构造函数注入

  <bean name="user1" class="cn.hd.injection.User">
             <constructor-arg name="name" value="李超杰" index="0" type="java.lang.String"></constructor-arg>
             <constructor-arg name="age" value="18" index="1"></constructor-arg>
         </bean>

  name    value (ref)      index         type

  属性     具体的值         参数的位置    参数的类型

(3)     p’空间注入(最简单)但是 业界不认可  还是使用<property>

第一步导入约束

xmlns:p=http://www.springframework.org/schema/p
       http://www.springframework.org/schema/p

<bean name="user2" class="cn.hd.injection.User" p:age="12" p:name="赵傻强" p:car-ref="car"></bean

(4)   spel注入类似于El和ognl表达式    

<bean name="user3" class="cn.hd.injection.User">
        <property name="name" value="#{user2.name}"></property>
        <property name="car" value="#{car}"></property>
</bean>

复杂类型的注入

数组

Arr

<bean name="collectionBean" class="cn.hd.injection.CollectionBean">
       <!--数组中的元素只有一个那么它的配置和基本类型一样-->

多个数据

  <!-- <property name="arr" value="1"></property>-->
       <property name="arr">
           <array>
               <value>赵四</value>
               <value>赵五</value>
               <ref bean="car"></ref>
           </array>
       </property>
</bean>
CollectionBean collectionBean = (CollectionBean) ac.getBean("collectionBean");
        Object[]arr=collectionBean.getArr();
        for (Object o:arr){
            System.out.println(o);

List / set

  <!--list集合中只有一个元素配置和基本类型一样-->
       <!--<property name="list" value="1"></property>-->
        <property name="list">
            <list>
                <value>李四</value>
                <value>李五</value>
                <ref bean="user1"></ref>
            </list>
        </property>
CollectionBean collectionBean = (CollectionBean) ac.getBean("collectionBean");
        List list=collectionBean.getList();
        for (Object o:list){
            System.out.println(o);

map

键值对 key key-ref  value  value-ref Map<k,v>

<property name="map">
            <map>
                <entry key="name" value="赵二"></entry>
                <entry key="user" value-ref="user2"></entry>
                <!--<entry key="user" key-ref="" ></entry>-->
CollectionBean collectionBean = (CollectionBean) ac.getBean("collectionBean");
        Map map = collectionBean.getMap();
        String name = (String) map.get("name");
        System.out.println(name);
        User user = (User) map.get("user");
        System.out.println(user);

Properties

<property name="properties">
            <props>
                <prop key="driverClass">com.sun</prop>
                <prop key="jdbcUrl">jdbc://localhost:3306/...</prop>
                <prop key="user">root</prop>
            </props>
        </property>

模块化

<import resource="classpath:applicationContext.xml"></import>

resource 其他配置文件的地址










    






























### PyCharm 打开文件显示全的解决方案 当遇到PyCharm打开文件显示全的情况时,可以尝试以下几种方法来解决问题。 #### 方法一:清理缓存并重启IDE 有时IDE内部缓存可能导致文件加载异常。通过清除缓存再启动程序能够有效改善此状况。具体操作路径为`File -> Invalidate Caches / Restart...`,之后按照提示完成相应动作即可[^1]。 #### 方法二:调整编辑器字体设置 如果是因为字体原因造成的内容显示问题,则可以通过修改编辑区内的文字样式来进行修复。进入`Settings/Preferences | Editor | Font`选项卡内更改合适的字号大小以及启用抗锯齿功能等参数配置[^2]。 #### 方法三:检查项目结构配置 对于某些特定场景下的源码视图缺失现象,可能是由于当前工作空间未能正确识别全部模块所引起。此时应该核查Project Structure的Content Roots设定项是否涵盖了整个工程根目录;必要时可手动添加遗漏部分,并保存变更生效[^3]。 ```python # 示例代码用于展示如何获取当前项目的根路径,在实际应用中可根据需求调用该函数辅助排查问题 import os def get_project_root(): current_file = os.path.abspath(__file__) project_dir = os.path.dirname(current_file) while not os.path.exists(os.path.join(project_dir, '.idea')): parent_dir = os.path.dirname(project_dir) if parent_dir == project_dir: break project_dir = parent_dir return project_dir print(f"Current Project Root Directory is {get_project_root()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值