.spring 常用的注入方式有哪些

不及物动词 其他 105

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Spring框架中,常用的注入方式有以下几种:

    一、构造器注入(Constructor Injection):
    构造器注入是通过调用目标bean的构造方法来实现依赖注入。在配置文件中,使用元素来定义构造器注入的参数。例如:

    <bean id="exampleBean" class="com.example.ExampleBean">
        <constructor-arg name="dependencyBean" ref="dependencyBean"/>
    </bean>
    

    二、属性注入(Property Injection):
    属性注入是通过给目标bean的属性赋值来实现依赖注入。在配置文件中,使用元素来定义属性注入的值。例如:

    <bean id="exampleBean" class="com.example.ExampleBean">
        <property name="dependencyBean" ref="dependencyBean"/>
    </bean>
    

    三、接口注入(Interface Injection):
    接口注入是通过在目标bean的接口中定义setter方法来实现依赖注入。在配置文件中,使用元素来调用接口的setter方法,并注入相应的依赖对象。例如:

    <bean id="exampleBean" class="com.example.ExampleBean">
        <property name="dependencyBean">
            <ref bean="dependencyBean"/>
        </property>
    </bean>
    

    四、注解注入(Annotation Injection):
    注解注入是通过使用注解来标记需要注入的属性或构造方法,从而实现依赖注入。在目标bean类中,使用@Autowired、@Resource等注解来标记需要注入的属性或构造方法。例如:

    @Component
    public class ExampleBean {
        @Autowired
        private DependencyBean dependencyBean;
        // ...
    }
    

    以上是Spring框架中常用的注入方式,根据具体的需求和项目架构选择适合的注入方式可以提高代码的灵活性和可维护性。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在 Spring 中,常用的注入方式有以下几种:

    1. 构造器注入:通过构造器来注入依赖对象,通过构造器参数的方式传递依赖对象。在构造对象时,Spring容器会自动为构造器的参数赋值。可以通过在构造器上添加@Autowired注解来实现自动注入。

    示例代码:

    public class UserService {
        private UserDao userDao;
    
        @Autowired
        public UserService(UserDao userDao) {
            this.userDao = userDao;
        }
    }
    
    1. Setter 方法注入:通过 setter 方法来注入依赖对象,Spring 容器会自动调用 setter 方法并为属性赋值。可以通过在 setter 方法上添加 @Autowired 注解来实现自动注入。

    示例代码:

    public class UserService {
        private UserDao userDao;
    
        @Autowired
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    }
    
    1. 字段注入:直接将依赖对象注入到字段上,通过反射为字段赋值。可以通过在字段上添加 @Autowired 注解来实现自动注入。

    示例代码:

    public class UserService {
        @Autowired
        private UserDao userDao;
    }
    
    1. 方法注入:通过方法注入依赖对象,可以在方法上添加 @Autowired 注解,Spring 容器会自动调用该方法并为方法参数赋值。

    示例代码:

    public class UserService {
        private UserDao userDao;
    
        @Autowired
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    }
    
    1. 自定义注解注入:可以通过自定义注解和注解处理器来实现依赖注入。可以在自定义注解中指定需要注入的依赖对象,然后通过注解处理器在需要注入的地方进行注入操作。

    示例代码:

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Autowired
    public @interface MyAutowired {
    }
    
    public class UserService {
        @MyAutowired
        private UserDao userDao;
    }
    
    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在Spring框架中,常用的注入方式有以下几种:

    1. 构造器注入(Constructor Injection):
      通过在类的构造方法中注入依赖对象。在类实例化时,通过构造方法将依赖对象传递给类的成员变量。

      public class UserService {
          private UserRepository userRepository;
      
          public UserService(UserRepository userRepository) {
              this.userRepository = userRepository;
          }
      
          // ...
      }
      
      <bean id="userRepository" class="com.example.UserRepositoryImpl" />
      <bean id="userService" class="com.example.UserService">
          <constructor-arg ref="userRepository" />
      </bean>
      
    2. Setter方法注入(Setter Injection):
      通过为类定义setter方法,并在配置文件中设置依赖对象的引用,Spring容器在实例化类后将依赖对象通过setter方法注入。

      public class UserService {
          private UserRepository userRepository;
      
          public void setUserRepository(UserRepository userRepository) {
              this.userRepository = userRepository;
          }
      
          // ...
      }
      
      <bean id="userRepository" class="com.example.UserRepositoryImpl" />
      <bean id="userService" class="com.example.UserService">
          <property name="userRepository" ref="userRepository" />
      </bean>
      
    3. 接口注入(Interface Injection):
      通过为类定义接口,并在配置文件中使用标签配置接口实现类,Spring容器在实例化类后将依赖对象通过接口注入。

      public interface UserService {
          void setUserRepository(UserRepository userRepository);
      
          // ...
      }
      
      public class UserServiceImpl implements UserService {
          private UserRepository userRepository;
      
          @Override
          public void setUserRepository(UserRepository userRepository) {
              this.userRepository = userRepository;
          }
      
          // ...
      }
      
      <bean id="userRepository" class="com.example.UserRepositoryImpl" />
      <bean id="userService" class="com.example.UserServiceImpl" />
      <bean id="proxyUserService" class="org.springframework.aop.framework.ProxyFactoryBean">
          <property name="proxyInterfaces" value="com.example.UserService" />
          <property name="target" ref="userService" />
          <property name="interceptorNames">
              <list>
                  <value>lookupMethodInterceptor</value>
              </list>
          </property>
      </bean>
      
      <bean id="lookupMethodInterceptor" class="org.springframework.aop.framework.adapter.InterfaceIntroductionInterceptor">
          <property name="delegate" ref="userRepository" />
          <property name="publishedInterfaces">
              <list>
                  <value>com.example.UserService</value>
              </list>
          </property>
      </bean>
      
    4. 字段注入(Field Injection):
      通过为类的成员变量添加@Autowired或@Inject注解,Spring容器在实例化类后自动将依赖对象注入。

      public class UserService {
          @Autowired
          private UserRepository userRepository;
      
          // ...
      }
      
      <context:annotation-config />
      <bean id="userRepository" class="com.example.UserRepositoryImpl" />
      <bean id="userService" class="com.example.UserService" />
      
    5. 方法注入(Method Injection):
      通过为类定义方法,并在配置文件中使用@Lookup或@Bean注解,在方法中获取依赖对象。

      public abstract class UserService {
          public abstract UserRepository getUserRepository();
      
          // ...
      }
      
      public class UserServiceImpl extends UserService {
          private UserRepository userRepository;
      
          @Override
          @Lookup
          public UserRepository getUserRepository() {
              return userRepository;
          }
      
          // ...
      }
      
      <bean id="userRepository" class="com.example.UserRepositoryImpl" />
      <bean id="userService" class="com.example.UserServiceImpl" />
      
    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部