栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringIOC笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringIOC笔记

Spring 一. Spring的基本概念
  • IOC:控制反转,将创建和调用对象交给spring
  • AOP:面向切面编程,在保留原有代码的情况,增加新功能
  • 使用spring的目的:降低程序的耦合度
二. IOC 1. IOC的底层原理
  • IOC的底层: 工厂模式和反射以及xml映射

  • Spring提供实现IOC的两种方式:

    • BeanFactory接口:IOC容器基本实现是Spring内部接口的使用接口,不提供给开发人员进行使用(加载配置文件时候不会创建对象,在获取对象时才会创建对象。)

      	BeanFactory context = new ClassPathXmlApplicationContext("applicationContext.xml");
      	Class className = context.getBean("id",Class.class);
      
    • ApplicationContext接口:BeanFactory接口的子接口,提供更多更强大的功能,提供给开发人员使用(加载配置文件时候就会把在配置文件对象进行创建)推荐使用!

          ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
          Class className = context.getBean("id",Class.class);
      
2. IOC容器-xml配置
  • IOC操作Bean管理

    • Bean管理就是两个操作:(1)Spring创建对象;(2)Spring注入属性
  • 基于XML配置文件创建对象

    
    
  • 基于XML方式注入属性(DI:依赖注入(注入属性))

    
        
        
    
    
    
        
    
    
    
    
    
  • 注入空值和特殊符号

    
        
        
            
        
        
        
        
            >]]>
        
    
    
  • 注入属性-外部bean

    
        
     
    
    
  • 基于XML方式注入内部bean和级联赋值

    
        
            
                
            
        
        
    
    
    
    
        
        
    
    
    
  • IOC 操作 Bean 管理——xml 注入集合属性

    
        
            
                数组值
                数组值
            
        
        
            
                集合值
                集合值
            
        
        
            
                集合值
                集合值
            
        
        
            
                
                
            
        
    
    
  • 在集合里面设置对象类型值

    
        
    
    
    
    
        
            
        
    
    
    
    
        
    
    
    
        
    
    
3. FactoryBean
  1. Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean)

  2. 普通 bean:在配置文件中定义 bean 类型就是返回类型

  3. 工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样 第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean 第二步 实现接口里面的方法,在实现的方法中定义返回的 bean 类型

public class MyBean implements FactoryBean {
    //定义返回bean
    @Override
    public Object getObject() throws Exception {
        Object object = new Object();
        object.setCname("abc");
        return object;
    }
}
 

@Test
public void test(){
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    Object object = context.getBean("myBean",object.class);
}
4. bean作用域
  1. 在 spring 配置文件 bean 标签里面有属性(scope)用于设置单实例还是多实例。

  2. scope 属性值 第一个值 默认值,singleton表示是单实例对象,第二个值 prototype,表示是多实例对象

  3. a)singleton 单实例,prototype 多实例

    b)设置 scope 值是 singleton 时候,加载 spring 配置文件时候就会创建单实例对象 ;设置 scope 值是 prototype 时候,不是在加载 spring 配置文件时候创建对象,在调用 getBean 方法时候创建多实例对象

5. bean生命周期
  1. 生命周期 :从对象创建到对象销毁的过程

  2. (1)通过构造器创建 bean 实例(无参数构造)

    (2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)

    (3)调用 bean 的初始化的方法(需要进行配置初始化的方法)

    (4)bean 可以使用了(对象获取到了)

    (5)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

    1. 演示 bean 生命周期 :
    public class MyBeanPost implements BeanPostProcessor {
        @Override
        public Object postProcessBeforeInitialization(Object bean,String beanName) throws BeansException {
            //在初始化之前执行的方法
            return bean;
        }
        @Override
        public Object postProcessAfterInitialization(Object bean,String beanName) throws BeansException {
            //在初始化之后执行的方法
            return bean;
        }
    }
    
    
        
    
    
    
    
  3. bean 的后置处理器,bean 生命周期有七步 (正常生命周期为五步,而配置后置处理器后为七步)

    (1)通过构造器创建 bean 实例(无参数构造)

    (2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法)

    (3)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization

    (4)调用 bean 的初始化的方法(需要进行配置初始化的方法)

    (5)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization

    (6)bean 可以使用了(对象获取到了)

    (7)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法)

6. 外部属性文件
  • 方式一:直接配置数据库信息:

    
        
        
        
        
    
    
  • 方式二:引入外部属性文件配置数据库连接池

    prop.driverClass=com.mysql.jdbc.Driver
    prop.url=jdbc:mysql://localhost:3306/
    prop.userName=root
    prop.password=root
    
    
    
    
        
        
        
        
    
    
7. IOC容器-注解实现
  1. 什么是注解

    (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)

    (2)使用注解,注解作用在类上面,方法上面,属性上面

    (3)使用注解目的:简化 xml 配置

  2. Spring 针对 Bean 管理中创建对象提供注解

    下面四个注解功能是一样的,都可以用来创建 bean 实例

    (1)@Component

    (2)@Service

    (3)@Controller

    (4)@Repository

  3. 基于注解方式实现对象创建

    • 第一步 引入依赖 (引入spring-aop jar包)

    • 第二步 开启组件扫描

    
    
    • 第三步 创建类,在类上面添加创建对象注解
    @Component("userService")
    public class UserService {
        public void add(){
            System.out.println();
        }
    }
    
  4. 开启组件扫描细节配置


    
    
    
    

  1. 基于注解方式实现属性注入

    (1)@Autowired:根据属性类型进行自动装配

    第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解

    第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解

    @Service
    public class UserService{
        //定义dao类型属性
        //不需要添加set方法
        //添加注入属性注解
        @AutoWired
        private UserDao userDao;
    }
    
    //Dao实现类
     @Repository
    public class UserDaoImpl implements userDao{
     }
    

    (2)@Qualifier:根据名称进行注入,这个@Qualifier 注解的使用,和上面@Autowired 一起使用

     @Autowired
    //根据名称进行注入(目的在于区别同一接口下有多个实现类,根据类型就无法选择,从而出错!)
     @Qualifier("userDaoImpl")
    private UserDao userDao;
    

    (3)@Resource:可以根据类型注入,也可以根据名称注入(它属于javax包下的注解,不推荐使用!)

     //@Resource //根据类型进行注入
     @Resource("userDaoImpl")//根据名称进行注入
     private UserDao userDao;
    

    (4)@Value:注入普通类型属性

    @Value("abc")
    private String name;
    
  2. 完全注解开发

    • 创建配置类,替代 xml 配置文件
    @Configuration //作为配置类,代替xml配置文件
    @ComponentScan(basePackages = {""})
    public class SpringConfig{
    }
    
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号