❤️Spring入门----IOC详解
Posted 一只楠喃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️Spring入门----IOC详解相关的知识,希望对你有一定的参考价值。
Spring-IOC详解
IoC详解
1、Bean创建
- @Component,组件注解,用于将任意对象添加到spring容器中
- @Controller,将web层的对象,添加到spring容器。
- @Service,将service层的对象,添加到spring容器。
- @Repository,将dao层的对象,添加到spring容器。
2、依赖注入
按照名称注入
public class 类名{
@Resource(name=“名称”)
private 类型 变量;
}
按照类型注入
public class 类名{
@Resource
private 类型 变量;
}
注册普通数据
@Value 可以给成员变量注入、也可以给属性注入(getter/setter)
properties数据注入
- 编写properties文件,key=value
- 加载 @PropertySource(“classpath:properties文件”)
- 注入数据 @Value("${key}")
@Configuration
@PropertySource(“classpath:demo07.properties”)
public class Demo07Configuration {
@Value(" j d b c . d r i v e r " ) p r i v a t e S t r i n g d r i v e r ; / / 给 成 员 变 量 赋 值 @ V a l u e ( " {jdbc.driver}") private String driver; //给成员变量赋值 @Value(" jdbc.driver")privateStringdriver;//给成员变量赋值@Value("{jdbc.url}")
public void setUrl(String url) { //给写属性赋值
System.out.println(“url:” + url);
System.out.println(“driver:” + driver);
3、@Bean 注入第三方类
3.1、 按照类型
模拟类
public class UserDao {
public void selectAll() {
System.out.println("user dao ");
}
}
配置类
@Configuration
public class Demo08Configuration {
@Bean
public UserDao createUserDao() {
return new UserDao();
}
}
测试类
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Demo08Configuration.class)
public class TestDemo08 {
@Resource
private UserDao userDao;
@Test
public void testDemo07() {
// UserDao userDao = new UserDao();
userDao.selectAll();
}
}
3.2、按照名称
- 模拟数据类
- 接口
- 实现类A
- 实现类B
- 配置类,创建2个实现类,并进行不同的命名
- 测试类,依次注入不同命名的实现类
实现
- 配置类
@Configuration
public class Demo09Configuration {
@Bean(name=“userDaoA”)
public UserDao createUserDaoA() {
return new UserDaoImplA();
}
@Bean(name=“userDaoB”)
public UserDao createUserDaoB() {
return new UserDaoImplB();
}
}
测试类
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Demo09Configuration.class)
public class TestDemo09 {
@Resource(name=“userDaoA”)
private UserDao userDaoA;
@Resource(name=“userDaoB”)
private UserDao userDaoB;
@Test
public void testDemo07() {
userDaoA.selectAll();
userDaoB.selectAll();
}
}
3.3、参数类型:引用数据
-
@Bean 修饰的方法,如果有参数,将自动注入。
-
步骤:
- 模拟类
- UserDao
- UserService
- 配置类
- 编写方法,createUserDao
- 编写方法,createUserService( UserDao userDao )
- 测试类
- 模拟类
-
实现
- 配置类
@Configuration
public class Demo10Configuration {
@Bean
public UserDao userDao() {
return new UserDao();
}
@Bean
public UserService userService(UserDao userDao) {
userDao.selectAll();
return new UserService();
}
}
测试类
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Demo10Configuration.class)
public class TestDemo10 {
@Resource(name=“userService”)
private UserService userService;
@Test
public void testDemo07() {
userService.selectAll();
}
}
3.4、 参数类型:简单数据
properties配置文件
#key=value
jdbc.driver=com.mysql.jdbc.cj.Driver
jdbc.url=jdbc:mysql://localhost:3306/db2
user.username=jack
user.password=6666
配置类
@Configuration
@PropertySource(“classpath:demo07.properties”)
public class Demo11Configuration {
@Bean
public User createUser(@Value(" u s e r . u s e r n a m e " ) S t r i n g u s e r n a m e , @ V a l u e ( " {user.username}") String username, @Value(" user.username")Stringusername,@Value("{user.password}") String password) {
return new User(username,password);
}
}
测试类
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Demo11Configuration.class)
public class TestDemo11 {
@Resource
private User user;
@Test
public void testDemo07() {
System.out.println(user);
}
}
4、 Bean 作用域
- 默认2个作用域:
- 单例 singleton :整个spring容器只有一个。
- 多例 prototype:每获得一次创建一份。
4.1、 单例
dao,确定作用域方式
@Repository
@Scope(“singleton”)
public class UserDao {
}
配置类
@Configuration
@ComponentScan(basePackages = {“com.czxy.demo12_scope.dao”})
public class Demo12Configuration {
}
测试类,注入2次,打印结果一样的。
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = Demo12Configuration.class)
public class TestDemo12 {
@Resource
private UserDao userDao1;
@Resource
private UserDao userDao2;
@Test
public void testDemo4() {
System.out.println(userDao1);
System.out.println(userDao2);
}
}
4.2、 多例
修改单例代码
@Repository
//@Scope(“singleton”)
@Scope(“prototype”)
public class UserDao {
}
4.3、 常量
@Repository
//@Scope(“singleton”)
//@Scope(“prototype”)
//@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) //单例常量 singleton
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) //多例常量 prototype
public class UserDao {
}
以上是关于❤️Spring入门----IOC详解的主要内容,如果未能解决你的问题,请参考以下文章
❤️爆肝万字!一文最全总结之Spring从入门到入土❤️(建议收藏)