验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Spring中怎么利用IOC实现注入

阅读:689 来源:乙速云 作者:代码code

Spring中怎么利用IOC实现注入

      1.环境搭建

      maven依赖:

      
         
            org.springframework
            spring-webmvc
            5.2.0.RELEASE
         
       

      在resources文件夹下创建xml文件:

      
          
              ......
          
      

      项目结构:

      Spring中怎么利用IOC实现注入

      2.注入方式

      2.1.配置文件

      2.1.1.Set注入

      在xml中使用property标签,调用set方法进行注入。

      实体类:

      使用set方法注入,实体类中必须存在set方法,否则会注入失败。

      package com.eryi.beans;
      public class User {
          private String username;
          private String password;
          public String getUsername() {
              return username;
          }
          public void setUsername(String username) {
              this.username = username;
          }
          public String getPassword() {
              return password;
          }
          public void setPassword(String password) {
              this.password = password;
          }
          @Override
          public String toString() {
              return "User{" +
                      "username='" + username + ''' +
                      ", password='" + password + ''' +
                      '}';
          }
      }

      xml文件:

      
          
              
              
          
      

      测试:

      public static void main(String[] args) {
              ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
              User user=applicationContext.getBean("user",User.class);
              System.out.println(user.toString());
          }

      Spring中怎么利用IOC实现注入

      2.1.2.构造器注入

      在xml文件中使用constructor-arg标签,调用构造器进行注入。

      实体类:

      使用构造器注入,实体类中必须存在构造器,否则会注入失败。

      package com.eryi.beans;
      public class User {
          private String username;
          private String password;
          public User(String username, String password) {
              this.username = username;
              this.password = password;
          }
          @Override
          public String toString() {
              return "User{" +
                      "username='" + username + ''' +
                      ", password='" + password + ''' +
                      '}';
          }
      }

      xml:

      
          
          
      

      测试:

      public static void main(String[] args) {
              ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
              User user=applicationContext.getBean("user",User.class);
              System.out.println(user.toString());
          }

      Spring中怎么利用IOC实现注入

      2.2.注解注入

      Spring支持通过注解的方式将注入实体注入IOC,然后通过注解去IOC中获取实体。

      注入IOC的注解有:

      @Component、@Repository、@Service、@Controller

      @Component是通用的,后面三个只是为了细化层次为各个分层上的实体推出的,功能上来说都具有将实体注入IOC的能力。

      从IOC中获取实体的注解有:

      @Autowired

      代码示例:

      开启注解扫描:

      需要首先在Spring的配置文件中开启注解扫描,这样Spring才回去配置的路径下扫描带有注解的Bean将其纳入IOC。

      public static void main(String[] args) {
              ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
              User user=applicationContext.getBean("user",User.class);
              System.out.println(user.toString());
          }

      dao层:

      package com.eryi.beans;
      import org.springframework.stereotype.Component;
      @Component
      public class UserDao {
          public String findAll(){
              return "find all users";
          }
      }

      service:

      @Component
      public class UserService {
          private UserDao userDao;
          @Autowired
          public UserService(UserDao userDao) {
              this.userDao = userDao;
          }
          public String findAll(){
              return  userDao.findAll();
          }
      }

      测试:

      package com.eryi.beans;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      public class test {
          public static void main(String[] args) {
              ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
              UserService userService=applicationContext.getBean("userService",UserService.class);
              System.out.println(userService.findAll());
          }
      }

      Spring中怎么利用IOC实现注入

      3.获取方式

      有两种获取方式:

      • 通过id

      • 通过类型

      通过id:

      UserService userService=applicationContext.getBean("userService",UserService.class);

      通过类型:

      UserService userService=applicationContext.getBean(UserService.class);

      4.Bean关系

      在Spring框架中,配置文件除了可以描述类以外,还可以描述Bean的依赖关系。

      继承关系:

      
         
         
      
      
         
         
      

      抽象:

      标签中的“abstract”属性用于指定当前Bean是否为抽象Bean,其取值为“true”或“false”,默认为“false”。当一个Bean被指定为抽象Bean时,它不能被直接实例化,而只能作为其他Bean的父类或者模板。这个抽象Bean只是一个模板,其中可以定义一些通用的属性或方法,供其他Bean继承或者引用。

      ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
      User user_01=applicationContext.getBean("childBean",User.class);
      System.out.println(user_01);
      User user_02=applicationContext.getBean("parentBean",User.class);
      System.out.println(user_02);

      5.Bean生命周期

      一个bean在完整生命周期中会触发的方法顺序:

      • 构造器

      • 注入属性(set、构造、或者命名空间)

      • init-method方法

      • 生成实例对象

      • destroy-method(容器关闭触发该方法)

      注意:init-method、destroy-method需要配置才会生效。

      配置:

      
              
              
      

      实体类:

      public class User {
          private String username;
          private String password;
          public User() {
              System.out.println("construction......");
          }
          public String getUsername() {
              return username;
          }
          public void setUsername(String username) {
              System.out.println("set......");
              this.username = username;
          }
          public String getPassword() {
              return password;
          }
          public void setPassword(String password) {
              this.password = password;
          }
          private void init(){
              System.out.println("init......");
          }
          private void destroy(){
              System.out.println("destroy......");
          }
          @Override
          public String toString() {
              return "User{" +
                      "username='" + username + ''' +
                      ", password='" + password + ''' +
                      '}';
          }
      }

      测试:

      ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
      User user=context.getBean("user",User.class);
      context.close();

      Spring中怎么利用IOC实现注入

      6.Bean作用域

      四种作用域:

      • singleton,默认的,在IOC初始化时创建容器中的实例,全局访问的是同一个实例。

      • prototype,IOC初始化时不生成实例,每次请求生成一个实例。

      • session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

      • request 该属性仅对HTTP请求产生作用,每次HTTP请求都会创建一个新的实例

      • global-session 所有的Session共享一个Bean实例。

    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>