2021.01.25 Spring
-
bean的作用域
<!--1.单例--> <!--2.多例--> <!--1. 单例(默认)--> <!--创建一个bean,默认就是单例 容器生命周期相同 一个bean获取多次,对比地址值必定相等--> <!--2. 多例 scope="prototype"--> <!--每次bean的获取,都意味着一个新的bean的产生,地址值对比必定不相等-->
-
Spring中使用外部属性文件(实例:配置数据库信息)
<!--未使用配置数据库信息前--> <!--数据库的相关信息都写死在xml文件中--> <bean id="dataSource" class="ComboPooledDataSource全类名"> <property name="user" value="root"/> <property name="password" value="1234"/> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/> </bean> <!--使用外部配置文件--> <!--1. 导入context的依赖,导入相关jar包--> <!--2.配置BeanFactory后置处理器 propertyPlaceholder--> <context:property-placeholder location="classpath:db.properties"/> <!--2. 读取配置文件--> <bean id="dataSource" class="CombopooledDataSource全类名"> <property name="user" value=${user}/> <property name="password" value=${password}/> <property name="driverClass" value=${driverClass}/> <property name="jdbcUrl" value=${jdbcUrl}/> </bean>
-
SpEL Spring表达式语言,是一个支持运行时查询和操作对象图的强大的表达式语言,格式为#{…},作用⭐(动态赋值)⭐,使用场景如下
- 通过bean的id对bean进行引用⭐⭐
- 调用方法以及引用对象中的属性
- 计算表达式的值
- 正则表达式的计算
- 字面值表示
//1. 通过bean的id对bean进行引用 <bean id="person" class=Person的全限定类名 p:car="#{car}" ... > </bean> //2. 调用方法以及引用对象中的属性 <bean id="person" class=Person的全限定类名 p:car="#{tom.car}" > </bean> //调用方法还可链式赋值 <bean id="person" class=Person的全限定类名 p:name="#{tom.secondName.toString()}" > </bean> //3. 计算表达式的值 <bean id="person" class=Person的全限定类名 p:age="#{20+10}" 或者是 p:age="#{50-3}" 或者是 p:age="#{20*1}" 或者是 p:age="#{40/2}" 或者是 p:sex="#{2%2}" 同时其还支持 比较运算符(大于,小于,.....) 逻辑运算符(与,或,非) if-else运算符(表达式?执行体1:执行体2) > </bean> //4. 正则表达式的计算 <constructor-arg value= "#{ admin.email matches '[a-zA-Z0-9.-%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}' }" > </constructor-arg> //5. 字面值表示 <bean id="person" class=Person全类名 p:age="#{19}" p:height="#{176.3}" p:number="#{1e10}" p:name="#{'张三'}" p:secondName='#{"小狗"}' ></bean> //6. 调用静态方法/静态属性 使用T()包裹住 <property name="initValue" value="#{T(java.lang.Math).PI}" > </property>