Spring IoC容器与Bean管理

Spring IoC容器与Bean管理,第1张

Spring IoC容器与Bean管理

文章目录
  • 一、IoC控制反转
  • 二、DI依赖注入
  • 三、Spring
    • 1.spring的含义
      • 1.1狭义的Spring框架
      • 1.2广义的Spring生态体系
    • 2.传统开发方式
    • 3.Spring IoC容器
      • 3.1初体验
      • 3.2实例化Bean的三种方式
      • 3.3 从IoC容器中获取bean
      • 3.4 id与name属性相同点和区别
      • 3.5 路径表达式
      • 3.6 对象依赖注入
      • 3.7 注入集合对象
      • 3.8 查看容器内对象
      • 3.9 bean scope属性
      • 3.10 bean的生命周期
      • 3.11 四种组件类型注解
        • 1.基于注解配置IoC容器
        • 2.两类自动装配注解
        • 3.其他元数据注解
        • 4.Java config
      • 3.12 Spring Test测试模块


一、IoC控制反转


二、DI依赖注入

三、Spring 1.spring的含义

1.1狭义的Spring框架

1.2广义的Spring生态体系

2.传统开发方式

3.Spring IoC容器

3.1初体验

applicationContext.xml




    
    
        
        
        
    

    
        
        
        
    

    
        
        
        
    

    
        
        
    

    
        
        
    

    
        
        
    

public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        Apple sweetApple = context.getBean("sweetApple",Apple.class);
        System.out.println(sweetApple.getTitle());
        
        Child lily = context.getBean("lily", Child.class);
        lily.eat();
        
        Child andy = context.getBean("andy", Child.class);
        andy.eat();
    }
}
3.2实例化Bean的三种方式

构造方法


静态工厂


public class AppleStaticFactory {
  public static Apple createSweetApple(){
      Apple apple = new Apple();
      apple.setTitle("hfs");
      apple.setOrigin("Asia");
      apple.setColor("red");
      return apple;
  }
}

工厂实例方法


    
public class AppleFactoryInstance {
 public Apple createSweetApple(){
     Apple apple = new Apple();
     apple.setTitle("hfs");
     apple.setOrigin("Asia");
     apple.setColor("red");
     return apple;
 }
}
3.3 从IoC容器中获取bean

3.4 id与name属性相同点和区别


        
        
        

3.5 路径表达式

加载单个配置文化
加载多配置文件

3.6 对象依赖注入



3.7 注入集合对象

注入List

注入Set

注入Map

注入Properties

3.8 查看容器内对象
		//获取容器内所有beanId数组
        String[] beanNames = context.getBeanDefinitionNames();
        for(String b:beanNames){
            System.out.println(b);
            System.out.println(context.getBean(b).getClass().getName());
        }
3.9 bean scope属性



单例


多例

单例和多例对比

3.10 bean的生命周期

3.11 四种组件类型注解 1.基于注解配置IoC容器





    
    

//组件类型注解默认beanId为类目首字母小写
//beanId = userDao
@Repository
public class UserDao {
}

这些bean在容器中肯定是单例的,在Ioc容器初始化的过程中被创建

2.两类自动装配注解

@Service
public class UserService {
    //@Autowired
    //Spring IoC容器会自动通过反射技术将属性private修饰符自动改为public,直接进行复制
    //不再执行set方法
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public UserService() {
        System.out.println("创建Service");
    }

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    @Autowired
    //如果装配注解放在set方法上,则自动按类型/名称对set方法参数进行注入
    public void setUserDao(UserDao userDao) {
        System.out.println("setUdao"+userDao);
        this.userDao = userDao;
    }
}
@Service
public class DepartmentService {
    
    @Resource(name = "userDao")
    private IUserDao userDao;
}
3.其他元数据注解

@Service
@Scope("prototype") //设置单例/多例,XML中bean scope完全相同
public class UserService {
    //@Autowired
    //Spring IoC容器会自动通过反射技术将属性private修饰符自动改为public,直接进行复制
    //不再执行set方法
    private IUserDao userDao;

    @Value("${metaData}") //读取config.properties的metaData属性值
    private String metaData;

    @PostConstruct //XML中bean init-method完全相同
    public void init(){
        System.out.println("初始化"+metaData);
    }

    public IUserDao getUserDao() {
        return userDao;
    }

    public UserService() {
        System.out.println("创建Service");
    }

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    @Autowired
    //如果装配注解放在set方法上,则自动按类型/名称对set方法参数进行注入
    public void setUserDao(UserDao userDao) {
        System.out.println("setUdao"+userDao);
        this.userDao = userDao;
    }
}

配置config.properties

metaData=imooc.com
connection.driver=xxxx
connection.url=xxx
connection.username=xxx

在 applicationContext.xml 中配置config.properties



    
    
    

4.Java config



config

@Configuration //当前类是一个配置类,用于替代applicationContext.xml
@ComponentScan(basePackages = "com.imooc")
public class Config {
    @Bean //Java Config利用方法创建对象,将方法返回对象放入容器,beanId=方法名
    public UserDao userDao(){
        UserDao userDao = new UserDao();
        return userDao;
    }

    @Bean
    //先按name尝试注入,name不存在则按类型注入
    public UserService userService(UserDao userDao){
        UserService userService = new UserService();
        userService.setUserDao(userDao);
        return userService;
    }

    @Bean
    public UserController userController(UserService userService){
        UserController userController = new UserController();
        userController.setUserService(userService);
        return userController;
    }

}

使用

public class SpringApplication {
    public static void main(String[] args) {

        //基于java config配置IoC容器初始化
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        String[] ids = context.getBeanDefinitionNames();
        for(String s:ids){
            System.out.println(s+":"+context.getBean(s));
        }
    }
}
3.12 Spring Test测试模块


//将Junit4的执行权交由Spring Test,在测试用例执行前自动初始化IoC容器
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class SpringTestor {
    @Resource
    private UserService userService;

    @Test
    public void testUserService(){
        userService.createUser();
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4874249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-11
下一篇 2022-11-11

发表评论

登录后才能评论

评论列表(0条)

保存