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

自学Spring框架之IoC

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

自学Spring框架之IoC

向一个类中传递数据的方式有两种:

     *普通方法(set方法)

     *构造方法

依赖注入描述的是容器建立bean和bean之间的依赖关系的过程,如果bean 运行需要的是数字或者字符串?

得出传递数据的类型有:

        *引用类型

        *简单类型(基本数据类型与String)

依赖注入方式

              ###  >setter注入(Spring中叫setter)

                       #### *简单类型:

在一个类A中有基本数据类型是,例如int  String...时,写好对应的set方法,然后在配置bean时使用property标签和name以及value属性注入基本数据类型值,name代表的是类中的的基本数据成员

                      ####  *引用类型(常用):

经常用的,前提是,一个类A中需要使用另一个类B的对象,但不能使用new的形式,所以需要给这个B对象一个set方法,再分别创建对应类型bean,依赖关系是A依赖B所以再A类型中使用property标签和name以及ref属性注入引用类型对象,name值代表的是类中依赖的类的对象,ref代表的是IoC容器中依赖的bean

    
    
        
    
    

            ###    >构造器注入

                        ####*简单类型:

基本套路了,一个类中有基本数据类型就给他构造器,在配置bean中使用constructor-arg 标签和name,value,来注入基本数据类型

                       #### *引用类型:

当一个类A中有引用类型成员时,需要为它添加构造器赋初始值,在bean配置中,使用constructor-arg 标签和name,ref 属性来进行构造去注入引用类型对象 ,name代表的是A类中构造器中的形参,ref代表的是IoC容器中依赖的bean

    
    
        
    
    

如果构造器中形参列表发生变化,那么bean配置中的name值也得变化,耦合度太高,所以,一般会使用type,index,代替name属性 。

自动装配

Spring能自动装配Bean与Bean之间的依赖关系,即无须使用ref显式指定依赖Bean,而是由Spring容器检查XML配置文件内容,根据某种规则,为调用者Bean注入被依赖的Bean。

pring自动装配可通过元素的default-autowire属性指定,该属性对配置文件中所有的Bean起作用;也可通过对元素的autowire属性指定,该属性只对该Bean起作用。

autowire和default-autowire可以接受如下值:

  • no: 不使用自动装配。Bean依赖必须通过ref元素定义。这是默认配置,在较大的部署环境中不鼓励改变这个配置,显式配置合作者能够得到更清晰的依赖关系。
  • byName: 根据setter方法名进行自动装配。Spring容器查找容器中全部Bean,找出其id与setter方法名去掉set前缀,并小写首字母后同名的Bean来完成注入。如果没有找到匹配的Bean实例,则Spring不会进行任何注入。
  • byType: 根据setter方法的形参类型来自动装配。Spring容器查找容器中的全部Bean,如果正好有一个Bean类型与setter方法的形参类型匹配,就自动注入这个Bean;如果找到多个这样的Bean,就抛出一个异常;如果没有找到这样的Bean,则什么都不会发生,setter方法不会被调用。
  • constructor: 与byType类似,区别是用于自动匹配构造器的参数。如果容器不能恰好找到一个与构造器参数类型匹配的Bean,则会抛出一个异常。
  • autodetect: Spring容器根据Bean内部结构,自行决定使用constructor或byType策略。如果找到一个默认的构造函数,那么就会应用byType策略。

推荐使用byType,自动装配不能对简单类型操作

集合和数组注入
  •   数组
  • List
  • Set
  • Map
  • Properties

一个类中有集合或者数组时,提供set方法 

public class Person {

    private int[] array;

    private List list;

    private Set set;

    private Map map;

    private Properties properties;
    }

 配置bean时格式如下:

数组:赋值1  2  3


            
                1
                2
                3
            
        

List:添加值1 shicha true 1.1


            
                1
                shicha
                true
                1.1
            

Set:


            
                abc
           
            
        

Map:

 
            
                
                
                
            
        

Properties:

 
            
                china
                henan
                kaifeng
            
        

了解一下即可

IoC容器管理druid连接数据库

                1.首先在maven的pom.xml文件里添加druid的坐标


    com.alibaba
    druid
    1.1.12
    compile

                  2.在Spring配置文件里创建一个druid的bean


    
    
    
    

很好理解,就是在IoC容器中用bean去创建druid的对象,蓝色部分是固定的,红色部分可变,就和使用jar包连接数据库一样。

IoC容器管理C3P0连接数据库

方法和管理druid对象差不多

1.在maven导入c3p0坐标,mvnrepository可查


    c3p0
    c3p0
    0.9.1.2

2.在Spring配置文件里配置一个c3p0的bean


    
    
    
    

看到有的需要导入mysql驱动,不然会报错,我用的这个c3p0 版本没有报错

值得一提的是红色那行我添加进去会报错,注释就不会,可能和jdk版本有关

Spring加载properties文件

        1.开始context的命名空间




    

     这个百度了解一下就好,或者直接Ctrl+C Ctrl+V           

2.使用context空间加载porperties文件

porperties 配置文件如下

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/数据库名
jdbc.username=用户名
jdbc.password=密码

 代码如下




    

    
        
        
        
        
    

3.第三步也在上面了,只是改变了bean里属性value的注入路径,由直接给值变成从jdbc.配置文件获区



 获取IoC容器的方式
  • ClassPathXmlApplicationContext: 从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器
  • 此方式可同时加载多个配置文件!
public class BeanTest{
    public static void main(String args[]) throws Exception{
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Person p = ctx.getBean("person", Person.class);
        p.say();
    }
}
  • FileSystemXmlApplicationContext: 从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件来创建Spring容器。
    public class BeanTest{
        public static void main(String args[]) throws Exception{
            ApplicationContext ctx = new FileSystemXmlApplicationContext("绝对路径");
            Person p = ctx.getBean("person", Person.class);
            p.say();
        }
    }
    bena加载的三种方式:
    public static void main( String[] args ) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//        第一种使用bean的id值和强转获取
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
//        第二种使用bean的id值和类型获取
        BookDao bookDao1 = ctx.getBean("bookDao", BookDao.class);
//        第三种按类型找(仅限于只有一个此类型的bean)
        BookDao bean = ctx.getBean(BookDao.class);
        bookDao.save();
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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