非自定义Bean
一、Spring 配置非自定义Bean
1、非自定义Bean
例如: UserDaolmpl, UserServicelmpl。但是,在实际开发中有些功能类并不是我们自己定义的,而是使用的第三方jar包中的,那么,这些Bean要想让Spring进行管理,也需要对其进行配置
配置非自定义的Bean需要考虑如下两个问题:
被配置的Bean的实例化方式是什么?无参构造、有参构造、静态工厂方式还是实例工厂方式;
被配置的Bean是否需要注入必要属性。
案例:
1.1、配置Druid数据源交由Spring管理
1、导入Druid坐标
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!-- druid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
2、 通过有参构造
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/java_web"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
1.2、jdbc交由spring管理
1、Connection的产生是通过DriverManager的静态方法getConnection获取的,所以我们要用静态工厂方式配置
<bean class="java.lang.Class" factory-method="forName">
<constructor-arg name="className" value="com.mysql.jdbc.Driver"/>
</bean>
<bean id="connection" class="java.sql.DriverManager" factory-method="getConnection">
<constructor-arg name="url" value="jdbc:mysql://127.0.0.1:3306/java_web"/>
<constructor-arg name="user" value="root"/>
<constructor-arg name="password" value="123456"/>
</bean>
1.3 mybits交由spring管理
<!-- 配置mybatis-->
<bean id="inputStream" class="org.apache.ibatis.io.Resources" factory-method="getResourceAsStream">
<constructor-arg name="resource" value="mybatis-config.xml"/>
</bean>
<bean id="builder" class="org.apache.ibatis.session.SqlSessionFactoryBuilder"/>
<bean id="sqlSessionFactory" factory-bean="builder" factory-method="build">
<constructor-arg name="inputStream" ref="inputStream"/>
</bean>
二、Bean实例化的基本流程
1、Spring容器在进行初始化时,会将xml配置的的信息封装成一个BeanDefinition对象,
2、所有的BeanDefinition存储到一个名为beanDefinitionMap的Map集合中去,Spring框架在对该Map进行遍历,使用反射创建Bean实例对象,
3、创建好的Bean对象存储在一个名为singletonObjects的Map集合中、
4、当调用getBean方法时则最终从该Map集合中取出Bean实例对象返回。