Spring(持续更新)

一:IOC的理解

刚看完一篇大神的博文,故引用了他里面的一段对于IOC的解释  我觉得十分的好

     Action由原来的主动创建UserServiceImpl实例后就可以马上使用,变成了被动等待由Spring创建好UserServiceImpl实例之后再注入给Action,Action才能够使用。这说明Action对"UserServiceImpl"类的“控制权”已经被“反转”了,原来主动权在自己手上,自己要使用"UserServiceImpl"类的实例,自己主动去new一个出来马上就可以使用了,但现在自己不能主动去new "UserServiceImpl"类的实例,new "UserServiceImpl"类的实例的权力已经被Spring拿走了,只有Spring才能够new "UserServiceImpl"类的实例,而Action只能等Spring创建好"UserServiceImpl"类的实例后,再“恳求”Spring把创建好的"UserServiceImpl"类的实例给他,这样他才能够使用"UserServiceImpl",这就是Spring核心思想“控制反转”,也叫“依赖注入”,“依赖注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是对UserServiceImpl产生了依赖,Spring把Acion需要依赖的UserServiceImpl注入(也就是“给”)给Action,这就是所谓的“依赖注入”。对Action而言,Action依赖什么东西,就请求Spring注入给他,对Spring而言,Action需要什么,Spring就主动注入给他。

     注:   action 在有些地方也称为 controller

二:Spring中属性文件properties的读取与使用

今天在项目中看到一个用法,就是controller中使用 "${}"取值,如下图。

很明显,这肯定是在properties文件中取值,之前在spring的配置文件中也遇到过很多次,但一直没去纠结为什么能这样用。终于,今天来了兴趣,并在茫茫博海中找到了一些适合我的说法。

首先:为什么能用 "${}" 取properties中相应的值

wproperties 如果在 spring 中通过 PropertyPlaceholderConfigurer 加载,当spring 中需要 用到 properties 中的一些 key 和value 值时可以 利用 PorpertyPlaceholderConfiger 提供的$ 直接 取得。

扫描二维码关注公众号,回复: 8684735 查看本文章

placeholderPrefix 默认前缀占位符是"${"。可以根据需要改为其它的前缀符。  --- 这个特点估计就是 spring 中能用${xxx} 取得 properties 文件中的内容的理由吧,即估计是spring只要看到 是 ${  占位符 就会 到 PropertyPlaceholderConfigurer 中去找其加载的 properties文件,从而 spring能用${}取得 properties 中属性值

placeholdersuffix 默认后缀占位符是“}”。由于 PropertyPlaceholderConfigurer内置的功能非常丰富,如果它未找到${xxx}中定义的xxx键,它还会去JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找。通过启用systemPropertiesMode和searchSystemEnvironment属性,开发者能够控制这一行为。

${} 还可以直接用在 java bean 上即用在类上

其次:怎么才能这样使用"${}" 去取properties中的值

一般我们在spring中使用@Value(“${xxx}”)注入某个属性,只需要在sping的配置文件中,加入如下配置:

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  

        <property name="locations">  
            <list>  
                <value>classpath:*.properties</value>  
            </list>  
        </property>  
    </bean>  
    
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
    <property name="properties" ref="configProperties"/>
    </bean>

但如果要在Controller中也使用,需要在springmvc的配置文件中,同样加入如上配置,因为controller是属于mvc的

在controller中,即可以使用@Value注解赋值了。

@Value("${leave.processInstanceKey}")

 private String leaveProcessInstanceKey;  

注意这里不能加static,因为spring注入依赖的是set方法,而set方法,是普通对象的方法,但static是类的属性

然后我项目中的配置如下:

 用法:

发布了100 篇原创文章 · 获赞 96 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq_25221835/article/details/87605992