return DriverManager.getConnection("x", "x", "x");
}
}
<!-- 实例工厂 - 调用 factory.getConn() -->
<bean id="factory" class="com.mj.obj.ConnectionFactory"/>
<bean id="conn1" factory-bean="factory" factory-method="getConn1"/>
```
[](
)静态工厂
-----------------------------------------------------------------------
```
public class ConnectionFactory {
public static Connection getConn2() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("x", "x", "x");
}
}
[](
)FactroyBean
------------------------------------------------------------------------------
public class ConnectionFactoryBean implements FactoryBean {
@Override
public Connection getObject() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection("x", "x", "x");
}
@Override
public Class<?> getObjectType() {
return Connection.class;
}
}
<bean id="conn" class="com.mj.obj.ConnectionFactoryBean"/>
// & 开头代表创建的是FactoryBean类型的对象
// 参考: BeanFactory中的FACTORY_BEAN_PREFIX
System.out.println(ctx.getBean("&conn"))
[](
)引入外部配置文件
---------------------------------------------------------------------------
db.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test_mybatis
jdbc.username=root
jdbc.password=root
首先在 applicationContext.xml 根标签中引入标签库:
![在这里插入图片描述](https://img-blog.csdnimg.cn/6b771e107c714d0e978789284cae0cc5.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location=“db.properties”/>
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<!-- ${username} 会固定的获取到本机用户名 -->
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
[](
)SpEL表达式
--------------------------------------------------------------------------
> 参考资料:[https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions](
)
<property name="dog" value="#{dog}"/>
<property name="age" value="#{dog.testAge}"/>
<property name="name" value="#{dog.testName.bytes.length}"/>
<property name="name" value="#{dog.getTestName()}"/>-->
[](
)scope - 控制 bean 是否单例
---------------------------------------------------------------------------------------
> 参考资料:[https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes](
)
`scope="singleton"`:单例
* 通过同一个 id 值,在统一 IoC 容器中获取的永远是同一个实例
* 在 IoC 容器创建的时候,就会创建 bean,可以设置 `lazy-init="true"` 修改创建时机
`scope="prototype"`:非单例;每次 getBaen 时创建一次 bean
[](
)Converter
============================================================================
> [【Spring5.x】对象的生命周期、配置文件参数化、自定义类型转换器、后置处理Bean](
)
[](
)Spring 内置基本的类型转换功能
-------------------------------------------------------------------------------------
Spring 已经内置了基本的类型转换功能,比如:
* String 转 int
* String 转 Date(支持 **yyyy/MM/dd** 格式)
<property name="age" value="25"/>
<property name="birthday" value="2011/09/10"/>
[](
)自定义 Converter
--------------------------------------------------------------------------------
实现 Converter 接口:
public class DateConverter implements Converter<String, Date> {
private List<String> formats;
public void setFormats(List<String> formats) {
this.formats = formats;
}
@Override
public Date convert(String s) {
try {
return new SimpleDateFormat(format).parse(s);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
注册 Converter:
> 注:id 为 conversionService 是固定的
<property name="converters">
<set>
<bean class="com.mj.converter.DateConverter">
<property name="formats" value="yyyy-MM-dd"/>
</bean>
<bean class="com.mj.converter.DateConverter">
<property name="formats" value="MM_dd_yyyy"/>
</bean>
</set>
</property>
* * *
### 最后
**我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。**
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**
![新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏](https://img-blog.csdnimg.cn/img_convert/470967199b426c7b8f63ac6d4c6362af.png)
**还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。**
![新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏](https://img-blog.csdnimg.cn/img_convert/272189bc53725870642191272149e844.png)
### 最后
**我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。**
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**
[外链图片转存中...(img-xiPsWMq6-1630663279355)]
**还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。**
[外链图片转存中...(img-wFIUqrza-1630663279359)]