Spring的注入方式

1.1   属性依赖注入

l  依赖注入方式:手动装配 和 自动装配

l  手动装配:一般进行配置信息都采用手动

       基于xml装配:构造方法、setter方法

       基于注解装配:

l  自动装配:struts和spring 整合可以自动装配

       byType:按类型装配

       byName:按名称装配

       constructor构造装配,

       auto: 不确定装配。

1.1.1   构造方法

1.1.1.1         目标类

public class User {

   

    private Integer uid;

    private String username;

    private Integer age;

   

    public User(Integer uid, String username) {

        super();

        this.uid = uid;

        this.username = username;

    }

   

    public User(String username, Integer age) {

        super();

        this.username = username;

        this.age = age;

    }

   

 

1.1.1.2         spring配置

    <!-- 构造方法注入

        * <constructor-arg> 用于配置构造方法一个参数argument

            name :参数的名称

            value:设置普通数据

            ref:引用数据,一般是另一个bean id值

           

            index :参数的索引号,从0开始 。如果只有索引,匹配到了多个构造方法时,默认使用第一个。

            type :确定参数类型

        例如:使用名称name

            <constructor-arg name="username" value="jack"></constructor-arg>

            <constructor-arg name="age" value="18"></constructor-arg>

        例如2:【类型type 和  索引 index】

            <constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>

            <constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>

    -->

    <bean id="userId" class="com.itheima.f_xml.a_constructor.User" >

        <constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>

        <constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>

    </bean>

1.1.2   setter方法

<!-- setter方法注入

        * 普通数据

            <property name="" value="值">

            等效

            <property name="">

                <value>值

        * 引用数据

            <property name="" ref="另一个bean">

            等效

            <property name="">

                <ref bean="另一个bean"/>

   

    -->

    <bean id="personId" class="com.itheima.f_xml.b_setter.Person">

        <property name="pname" value="阳志"></property>

        <property name="age">

            <value>1234</value>

        </property>

       

        <property name="homeAddr" ref="homeAddrId"></property>

        <property name="companyAddr">

            <ref bean="companyAddrId"/>

        </property>

    </bean>

   

    <bean id="homeAddrId" class="com.itheima.f_xml.b_setter.Address">

        <property name="addr" value="阜南"></property>

        <property name="tel" value="911"></property>

    </bean>

    <bean id="companyAddrId" class="com.itheima.f_xml.b_setter.Address">

        <property name="addr" value="北京八宝山"></property>

        <property name="tel" value="120"></property>

    </bean>

 

1.1.3   P命令空间[了解]

l  对“setter方法注入”进行简化,替换<property name="属性名">,而是在

       <bean p:属性名="普通值"  p:属性名-ref="引用值">

l  p命名空间使用前提,必须添加命名空间

      

 

    <bean id="personId" class="com.itheima.f_xml.c_p.Person"

        p:pname="禹太璞" p:age="22"

        p:homeAddr-ref="homeAddrId" p:companyAddr-ref="companyAddrId">

    </bean>

   

    <bean id="homeAddrId" class="com.itheima.f_xml.c_p.Address"

        p:addr="DG" p:tel="东莞">

    </bean>

    <bean id="companyAddrId" class="com.itheima.f_xml.c_p.Address"

        p:addr="DG" p:tel="岛国">

    </bean>

 

1.1.4   SpEL[了解]

l  对<property>进行统一编程,所有的内容都使用value

       <property name="" value="#{表达式}">

       #{123}、#{'jack'} : 数字、字符串

       #{beanId}      :另一个bean引用

       #{beanId.propName}     :操作数据

       #{beanId.toString()}     :执行方法

       #{T(类).字段|方法}      :静态方法或字段

 

    <!--

        <property name="cname" value="#{'jack'}"></property>

        <property name="cname" value="#{customerId.cname.toUpperCase()}"></property>

            通过另一个bean,获得属性,调用的方法

        <property name="cname" value="#{customerId.cname?.toUpperCase()}"></property>

            ?.  如果对象不为null,将调用方法

    -->

    <bean id="customerId" class="com.itheima.f_xml.d_spel.Customer" >

        <property name="cname" value="#{customerId.cname?.toUpperCase()}"></property>

        <property name="pi" value="#{T(java.lang.Math).PI}"></property>

    </bean>

 

l  阅读:

      

1.1.5   集合注入

<!--

        集合的注入都是给<property>添加子标签

            数组:<array>

            List:<list>

            Set:<set>

            Map:<map> ,map存放k/v 键值对,使用<entry>描述

            Properties:<props>  <prop key=""></prop>  【】

           

        普通数据:<value>

        引用数据:<ref>

    -->

    <bean id="collDataId" class="com.itheima.f_xml.e_coll.CollData" >

        <property name="arrayData">

            <array>

                <value>DS</value>

                <value>DZD</value>

                <value>屌丝</value>

                <value>屌中屌</value>

            </array>

        </property>

       

        <property name="listData">

            <list>

                <value>于嵩楠</value>

                <value>曾卫</value>

                <value>杨煜</value>

                <value>曾小贤</value>

            </list>

        </property>

       

        <property name="setData">

            <set>

                <value>停封</value>

                <value>薄纸</value>

                <value>关系</value>

            </set>

        </property>

       

        <property name="mapData">

            <map>

                <entry key="jack" value="杰克"></entry>

                <entry>

                    <key><value>rose</value></key>

                    <value>肉丝</value>

                </entry>

            </map>

        </property>

       

        <property name="propsData">

            <props>

                <prop key="高富帅">嫐</prop>

                <prop key="白富美">嬲</prop>

                <prop key="男屌丝">挊</prop>

            </props>

        </property>

    </bean>

转载于:https://www.cnblogs.com/MrTanJunCai/p/9908161.html

### 构建任务失败解决方案 当遇到 `Execution failed for task ':app:shrinkReleaseRes'` 错误时,这通常意味着资源压缩过程中出现了问题。此错误可能由多种原因引起,包括但不限于配置不正确、依赖冲突或特定于项目的其他因素。 #### 可能的原因分析 1. **ProGuard 或 R8 配置不当** ProGuard 和 R8 是用于优化和混淆代码以及减少 APK 大小的工具。如果这些工具的配置存在问题,可能会导致资源无法正常处理[^1]。 2. **重复资源** 如果项目中有多个模块定义了相同的资源名称,可能导致冲突并引发该错误。检查是否存在重名的 drawable、string 等资源文件[^2]。 3. **第三方库兼容性** 某些第三方库可能与当前使用的 Gradle 插件版本或其他库存在兼容性问题,从而影响到资源打包过程中的行为[^3]。 4. **Gradle 缓存问题** 有时旧缓存数据会干扰新编译的结果,尝试清理本地仓库和重新同步项目可以帮助排除此类潜在障碍[^4]。 #### 推荐的操作方法 为了有效解决问题,建议按照以下步骤逐一排查: ```bash # 清理项目构建目录 ./gradlew clean # 删除 .gradle 文件夹下的所有内容以清除缓存 rm -rf ~/.gradle/caches/ ``` 调整 `build.gradle` 中的相关设置也是一个重要环节: ```groovy android { ... buildTypes { release { minifyEnabled true // 是否启用代码缩减 shrinkResources true // 是否开启资源压缩 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 尝试禁用 shrinkResources 来测试是否为资源压缩引起的错误 // shrinkResources false } } } ``` 此外,在 `proguard-rules.pro` 文件内添加必要的保留规则,防止关键类被意外移除: ```text -keep class com.example.yourpackage.** { *; } # 替换为你自己的包路径 -dontwarn androidx.**,com.google.** # 忽略警告信息 ``` 最后,确保所使用的 Android Studio 版本是最新的稳定版,并且已经应用了所有的补丁更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值