[学习笔记] Spring之Spring配置补充
# 学习 # · 2021-02-10
Spring中Bean的作用域问题
1、Bean的作用域:
(1)singleton:默认值,以单例模式创建Bean的实例,即容器中该Bean的实例只有一个。
(2)prototype:每次从容器中获取Bean时,都会创建一个新的实例。
(3)request:用于Web应用环境,针对每次HTTP请求都会创建一个实例。
(4)session:用于Web应用环境,同一个会话共享同一个实例,不同的会话使用不同的实例。
(5)global session:仅在Portlet的Web应用中使用,同一个全局会话共享一个实例。对于非PortLet环境,等同于session。
2、使用注解指定Bean的作用域:
@Scope("property")
@Service("userService")
public class UserServiceImpl implements UserService {
// 省略其他代码
}
使用注解定义bean
1、使用注解定义Bean:
/**
* 用户DAO类,实现UserDao接口,负责User类的持久化操作
*/
@Component("userDao")
public class UserDaoImpl implements UserDao {
public void save(User user) {
System.out.println("保存用户信息到数据库");
}
}
(1)通过注解@Component("userDao")
定义了一个名为userDao的Bean(实现了Bean组件定义),其作用与在XML配置文件中编写<bean id="userDao" class="dao.impl.UserDaoImpl" />
等效。
(2)@Repository
注解:用于标注DAO类。
(3)@Service
注解:用于标注业务类。
(4)@Controller
注解:用于标注控制器类。
使用Java的方式配置Spring(不使用XML)
1、JavaConfig:是Spring的一个子项目,在Spring4之后成为一个核心。
2、实现步骤一:创建一个持久化类User。
@Component
public class User {
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@Value("小红")
private String name;
public void say() {
System.out.println("你好,我叫" + name);
}
}
(1)@Component
注解:说明这个类被Spring接管,注册到了容器中。
(2)@Value
注解:属性注入值。
3、实现步骤二:创建一个Spring配置类。
@Configuration
public class MyConfig {
@Bean
public User getUser() {
return new User();
}
}
(1)@Configuration
注解:说明这个类被被Spring容器接管,注册到容器中,因为它本来就是一个@Component
。
(2)@Configuration
代表这是一个配置类,类似于applicationContext.xml配置文件。
(3)@Bean
注解:表示注册一个Bean,相当于配置文件中的bean标签。其中bean的id=方法中的名字,方法的返回值=bean的class属性。
(4)getUser()放啊返回要注入到bean的对象。
拆分Spring配置文件
1、对于使用XML方式进行配置的Spring项目,项目规模较大时,配置文件可读性、可维护性差,庞大的Spring配置文件难以阅读,建议将一个大的配置文件拆分成多个小的配置文件。
2、拆分方法:如果有多个配置文件需要载入,可以分别传入多个配置文件名,或以String[]方式传入多个配置文件名。
//方式一
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml",
"applicationContext-dao.xml",
"applicationContext-service.xml");
//方式二
String[] configs = {"applicationContext.xml",
"applicationContext-dao.xml",
"applicationContext-service.xml"};
ApplicationContext ctx = new ClassPathXmlApplicationContext(configs);
//方式三:采用通配符
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext*.xml");
如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/217/
评论