zoukankan      html  css  js  c++  java
  • Spring IOC

    Spring框架

    它目前是一个JAVAEE平台下最重要的一个框架,它已经是一个技术生态,基于SPRING框架可以大大提高项目的开发效率,主要应用的技术有:IOC, AOP,DT, MVC, Security, OAuth, ...

    Spring IOC

    依赖注入,也叫控制反转

    按需注入,当某个类中,需要另一个或多个对象时,而这一个或多个对象又被Spring 框架的容器所管理,那框架就可以帮助我们自动注入到目标对象中。

    public class User {
       private Integer id;
       private String name;
       private String password;
       private String realName;
    }
    // 传统的做法
    public class UserDemo {
       public static void main(String[] args) {
           //创建一个User
           User u = new User();
           // 设置属性值
           u.setId(1);
           u.setName("jack");
           u.setPassword("123456");
           u.setRealName("张三丰");
           //
           System.out.println(u);
      }
    }

    //如果是采用spring框架,则:

    //定义一个xml文件,来描述这个Bean
    ...
    <beans>
    <bean id="u" class="com.hcedu.entity.User">
      <property name="id" value="1"/>
           <propeprty name="name" value="jack"/>
          ...
       </bean>
    </beans>

    //在你的代码中,读取配置文件

    public class UserDemo {
       public static void main(String[] args) {
          //利用Spring框架的核心类,去加载 xml 文件
          ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
          //获取一个Bean
           User u = ac.getBean("u",User.class);
      }
    }

    Spring框架的功能

    它含盖了从视图层、控制层、业务层、持久层全方位的技术技持,视图和控制主要由 Spring MVC框架来辅助,而业务层主要由IOC, AOP,DT来辅助,持久层则有专门的接口和类来负责,如:spring对JDBC的支持,对mybatis的支持,还有对Hibernate以及JPA的支持。除此以外,它还提供了很多辅助性的功能,如:面向切面编程,拦截器、定时器、任务调度、安全、认证、授权、消息服务、邮件服务等等

    以上这些都需要用到Spring框架提供的核心容器[Application Context]以及IOC。当然,Spring框架与测试框架的集成也是做得很好的,如:与junit和testng的集成

    Spring IOC的核心API

    IOC, Inverse of Control, 控制反转, 也叫 Dependency Injection [DI]

    核心API:

    1. ApplicationContext 接口

      - ClassPathXmlApplicationContext

      - AnnotationConfigApplicationContext

    2. 所涉及到的一些注解:

      • @Configuration 告诉Spring 框架, 这是一个注解配置类

      • @ComponentScan 告诉Spring框架,去哪些包下面扫描相关的组件[Component]

      • @Component 告诉Spring框架,此类是一个Bean

        • @Controller

        • @Service

        • @Repository

      • @Value 直接给属性赋值, 使用不多

      • @Autowired 自动注入,是根据类型去匹配

      • @Qualifier, 当@Autowired有二义性时,配合此注解使用,它可以指定bean的名字。

      • @Resource ,相当于 @Autowired+@Qualifier

      • @Import 导入另一个配置类

      • @PropertySource 导入一个属性文件 [.properties]

      • @ImportResource 导入另一个配置文件 [.xml]

      • @Bean 用来修饰方法的,是定义在 配置类中的方法

      • ....

    注解配置步骤

    1. 编写一个注解配置类,这个类名一般叫:AppConfig

      @Configuration
      @ComponentScan("要扫描的包名")
      @ImportResource("你要导入的xml配置文件的路径")
      public class AppConfig {
         //nothing!
         
      }
    2. 把需要被扫描成组件的类,打上 @Component 注解

    3. 利用Spring的核心API,去加载并解析注解配置类

      ApplicationContext ac =
                     new AnnotationConfigApplicationContext(AppConfig.class);
      //利用ac 去获取Bean
      XXX x = ac.getBean("beanName", XXX.class);
      //...

    Spring AOP

    Spring DT

  • 相关阅读:
    Vmware15的安装以及Ubunt的在虚拟机上的安装
    MYSQL数据库查询索引
    SpringBoot和mybatis整合报错:Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 152; columnNumber: 10; 元素类型为 "mapper"
    idea中导包出现import org.apach.*,提交代码老出现冲突,不想使用.*的设置
    idea打断点后发现被标记的断点处那一行整行被标记了其他颜色,前面没有断点标识的红点
    Intellj IDEA 光标显示insert状态解决办法
    AngularJS 单元测试 Karma jasmine
    npm 及安装
    AngularJS 承诺 Promise
    AngularJS 路由及SPA理解
  • 原文地址:https://www.cnblogs.com/fanzhuangzhuang/p/11236684.html
Copyright © 2011-2022 走看看