Bean管理
- Spring创建对象;
- Spring注入属性
1. 创建对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="hello" class="com.yang.pojo.Hello"></bean>
</beans>
- id为创建的对象名,class为对应的类
- 注意:默认通过无参构造创建对象(反射)
2. 注入属性方式
2.1 基于set方法注入属性
property标签通过set方法注入属性
<bean id="hello" class="com.yang.pojo.Hello">
<property name="str" value="helloWorld"/>
</bean>
- name为键,value为值
2.2 基于有参构造注入属性
constructor-arg通过有参构造器注入属性
<bean id="hello" class="com.yang.pojo.Hello">
<constructor-arg name="str" value="helloWorld2"/>
</bean>
2.3 基于p命名空间注入属性
-
命名空间加上p
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd" xmlns:p="http://www.springframework.org/schema/p">
-
注入属性
<bean id="hello" class="com.yang.pojo.Hello" p:str="helloWorld3"/>
3. 注入不同属性
3.1 注入空值和特殊符号
-
注入空值
使用null标签
<bean id="hello" class="com.yang.pojo.Hello"> <property name="str"> <null></null> </property> </bean>
-
特殊符号
使用
<![CDATA[]]>
标记<bean id="hello" class="com.yang.pojo.Hello"> <property name="str"> <value><![CDATA[<<<helloWorld>>>]]></value> </property> </bean>
3.2 外部bean注入属性
-
User实体类
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private String id; private String userName; private Integer gender; }
-
UserDao
public interface UserDao { public User getUser(); }
-
UserDaoImpl
public class UserDaoImpl implements UserDao { public User getUser(){ User user = new User(); user.setId("1"); user.setUserName("yang"); user.setGender(1); return user; } }
-
UserService
public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public User getUser(){ User user = userDao.getUser(); System.out.println(user); return user; } }
-
test
@Test public void userServiceTest(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); UserService userService = context.getBean("userService", UserService.class); userService.getUser(); }
3.3 内部bean注入属性
其他部分同上,仅仅改变了bean注入的方式
<bean id="userService" class="com.yang.service.UserService">
<property name="userDao">
<bean id="userDaoImpl" class="com.yang.dao.UserDaoImpl"></bean>
</property>
</bean>
3.4 集合属性注入
<bean id="user" class="com.yang.pojo.User">
<property name="userName" value="yang"/>
<property name="gender" value="1"/>
<property name="id" value="1"/>
<property name="courses">
<list>
<value>语文</value>
<value>数学</value>
<value>英语</value>
</list>
</property>
<property name="friends">
<set>
<value>zs</value>
<value>ls</value>
<value>ww</value>
</set>
</property>
<property name="grades">
<map>
<entry key="语文" value="95"></entry>
<entry key="数学" value="95"></entry>
<entry key="英语" value="95"></entry>
</map>
</property>
</bean>
另一种方法
-
引入util命名空间
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation= http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
-
使用util:list…
<util:list id="courseList"> <value>语文</value> <value>数学</value> <value>英语</value> </util:list>
4. 自动装配
根据匹配的属性或者名称进行自动装配
4.1 根据名称
<util:list id="courses">
<value>语文</value>
<value>数学</value>
<value>英语</value>
</util:list>
<bean id="user" class="com.yang.pojo.User" autowire="byName">
</bean>
4.2 根据类型
<util:list id="courses">
<value>语文</value>
<value>数学</value>
<value>英语</value>
</util:list>
<bean id="user" class="com.yang.pojo.User" autowire="byType">
</bean>
注意:当一个类有多个对象时,不能使用byType进行自动装配
5. 外部配置文件引入
-
context命名空间引入
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
-
引入配置文件
<context:property-placeholder location="classpath:db.properties"/>
-
配置druid连接池
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </bean>