spring初学入门(1)——springIOC和DI(bai)

1.什么是spring?

简单来说,spring是一个轻量级的容器框架,容器内放置的都是java 对象(java bean),当容器启动时,容器为我们创建对象,容器销毁时,对象也会销毁。

1.1spirng的优点

1方便解耦,简化开发
通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
2AOP编程的支持
通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
3.声明式事务的支持
在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
4.方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。
5.方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

6.降低Java EE API的使用难度
Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

2.spring核心容器

BeanFactory
通过子类XmlBeanFactory 去读取配置 文件

ApplicationContext
继承了BeanFactory,不但实现了的功能,并且能够增加国际化,资源访问,事件传播等常用实现类

1通过ClassPathXmlApplicationContext创建

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
注:
ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作

2.通过FileSystemXmlApplicationContext创建
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
注:
FileSystemXmlApplicationContext会从指定的文件系统路径(绝对路径)中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。

3.获取Bean实例
创建Spring容器后,就可以获取Spring容器中的Bean。Spring获取Bean的实例通常采用以下两种方法:
Object getBean(String name);

根据容器中Bean的id或name来获取指定的Bean,获取之后需要进行强制类型转换。
T getBean(Class requiredType);
根据类的类型来获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换。

3.控制反转&依赖注入
控制反转IOC

控制反转,IOC。在使用Spring框架之后,**对象的实例不再由调用者来创建,而是由Spring容器来创建,**Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是控制反转。
·
写一个student实体类,属性有id和name用于测试。
通过new关键字来创建对象
Student student = new Student();
·
通过spring容器创建
// spring容器获取对象步骤:
// 1.bean.xml 声明要创建的对象
// 2.使用BeanFactory 的子类 去加载 bean.xml 配置 ,按照配置文件创建 bean对象,并且放置在容器中
// 3. getBean(Student.class); 使用getBean 根据类型获取

依赖注入,
DI的全称是Dependency Injection,中文称之为依赖注入
从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。
依赖注入主要用来控制容器中对象之间的依赖关系

   <!--  声明创建一个 IStudentDao 类型的对象

    class="com.qfedu.dao.impl.IStudentDaoImpl"  根据类创建对象
     id="iStudentDao" 就是创建的对象 再容器中的唯一表示 我们可以根据 id 从容器中获取IStudentDaoImpl 示例
    -->
    <bean id="iStudentDao" class="com.qfedu.dao.impl.IStudentDaoImpl">

    </bean>

    <!-- 声明在容器中创建一个StudentServiceImpl 示例  -->
    <bean id="studentService" class="com.qfedu.service.impl.StudentServiceImpl">

        <!-- 通过ref="iStudentDao"  容器中idiStudentDao 的对象 设置到StudentServiceImpl 对应studentDao 属性内  -->
        <!--   -->
        <property name="studentDao" ref="iStudentDao"></property>
    </bean>

测试

    public static void main(String[] args) {

       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:dibean.xml");


       // 根据id  获取 容器中的实例 IStudentDaoImpl
       IStudentDao iStudentDao = (IStudentDao) applicationContext.getBean("iStudentDao");


       StudentServiceImpl studentService = (StudentServiceImpl) applicationContext.getBean("studentService");
       // 不需要手动控制依赖 使用容器控制依赖关系
//        studentService.setStudentDao(iStudentDao);

       Student student =  studentService.findStudentById(100);

       System.out.println("student:"+student);

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值