Spring配置文件
Spring配置文件
Bean实例化的三种方式
- 无参构造方法实例化
- 工厂静态方法实例化
- 工厂实例方法实例化
无参构造方法实例化
Bean中需要有无参构造方法,没有则失败
<bean id="userDao" class="org.example.dao.impl.UserDaoImpl"></bean>
工厂静态方法实例化
工厂的静态方法返回Bean实例
<bean id="userDao" class="org.example.factory.BeanFactory" factory-method="getUserDao"></bean>
public class BeanFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
工厂实例方法实例化
工厂的非静态方法返回Bean实例
<bean id="factory" class="org.example.factory.BeanFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao2"></bean>
public class BeanFactory {
public UserDao getUserDao2(){
return new UserDaoImpl();
}
}
Spring的依赖注入方式
- set方法注入
- 构造方法注入
set方法注入
UserServiceImpl注入UserDao,其中,xml中的配置name="userDao"对应setUserDao方法中的UserDao,将UserDao中的U变成小写
<bean id="userService" class="org.example.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
public class UserServiceImpl implements UserService {
private UserDao userDao;
// set方法注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
构造方法注入
xml中name="userDao"对应构造方法中形参userDao
<bean id="userDao" class="org.example.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="org.example.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao){
this.userDao = userDao;
}
}
Bean的依赖注入的数据类型
- 普通数据类型
- 引用数据类型
- 集合数据类型
普通数据类型注入
<bean id="userDao" class="org.example.dao.impl.UserDaoImpl">
<property name="name" value="zhangshan"></property>
</bean>
public class UserDaoImpl implements UserDao {
private String name;
public void setName(String name) {
this.name = name;
}
}
集合数据类型
集合数据类型(List)的注入
<bean id="userDao" class="org.example.dao.impl.UserDaoImpl">
<property name="stringList">
<list>
<value>fdf</value>
<value>dsfjdos</value>
<value>fdjio</value>
</list>
</property>
</bean>
public class UserDaoImpl implements UserDao {
private List<String> stringList;
public void setStringList(List<String> stringList) {
this.stringList = stringList;
}
}
集合数据类型(Map<String, User>)的注入
<bean id="user1" class="org.example.domain.User">
<property name="name" value="kangkang"></property>
<property name="address" value="beijing"></property>
</bean>
<bean id="user2" class="org.example.domain.User">
<property name="name" value="xiaohong"></property>
<property name="address" value="shanghai"></property>
</bean>
<bean id="userDao" class="org.example.dao.impl.UserDaoImpl">
<property name="userMap">
<map>
<entry key="k1" value-ref="user1"></entry>
<entry key="k2" value-ref="user2"></entry>
</map>
</property>
</bean>
public class UserDaoImpl implements UserDao {
private Map<String, User> userMap;
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
}
集合数据类型(Properties)的注入
<bean id="userDao" class="org.example.dao.impl.UserDaoImpl">
<property name="properties">
<props>
<prop key="aff">fdsf</prop>
<prop key="fdfd">dsfaf</prop>
</props>
</property>
</bean>
public class UserDaoImpl implements UserDao {
private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!