zoukankan      html  css  js  c++  java
  • Spring 常用注入注解(annotation)和其对应xml标签

    使用注解需要修改bean.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
    
      <context:annotation-config/>
    
      <bean class="example.SimpleMovieCatalog">
          <qualifier value="main"/>
          <!-- inject any dependencies required by this bean -->
      </bean>
    
      <bean class="example.SimpleMovieCatalog">
          <qualifier value="action"/>
          <!-- inject any dependencies required by this bean -->
      </bean>
    
      <bean id="movieRecommender" class="example.MovieRecommender"/>
    
    </beans>

    黄色部分内容会使spring加载AutowiredAnnotationBeanPostProcessor等可以识别注解的bean。

    @AutoWire,自动注入,一般放在属性的set方法上,会为该属性自动注入。默认的注入是使用byType,就是根据xml中bean的类型去匹配。

    可以和@Qualifier匹配使用。

    注解实现方式:

    package com.bjsxt.service;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;

    import com.bjsxt.dao.UserDAO;
    import com.bjsxt.model.User;

    public class UserService {
       
        private UserDAO userDAO; 
       
        public void init() {
            System.out.println("init");
        }
       
        public void add(User user) {
            userDAO.save(user);
        }
        public UserDAO getUserDAO() {
            return userDAO;
        }
       
        @Autowired
        public void setUserDAO(@Qualifier("u") UserDAO userDAO) {//Qualifier:根据qualifier标签去查找,也可以根据name或者id去查找匹配的bean
            this.userDAO = userDAO;
        }
       

       
        public void destroy() {
            System.out.println("destroy");
        }
    }

    对应的xml实现方式:

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://www.springframework.org/schema/beans              http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"             >

      <bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl">       <property name="daoId" value="1"></property>      </bean>        <bean name="userDAO2" class="com.bjsxt.dao.impl.UserDAOImpl">          <property name="daoId" value="2"></property>      </bean>         <bean id="userService" class="com.bjsxt.service.UserService" scope="prototype" autowire="byType"><!-- 也可以设在beans标签上,好像是default-autowire scope="prototype"表示每次都创建一个新的实例对应的有singleton--只有一个实例 -->     </bean>   

    </beans>

    @Resource

    此标签也用于注入属性。相对来说用的比较多。

    该标签需要导入J2EE的JAR包:common-annotations.jar

    javax.annotation.Resource,默认byName,如果找不到对应name会去找对应type

        @Resource
        public void setUserDAO(UserDAO userDAO) { 
            this.userDAO = userDAO;
        }

    @Resource(name=”uuu”) //可以byName

    以上两种注解虽然可以在代码中设置注入,但是还要求在xml文件中配置bean。

    Component可以省去。

    5.10.3 Using filters to customize scanning

    By default, classes annotated with @Component, @Repository, @Service, @Controller, or a custom annotation that itself is annotated with @Component are the only detected candidate components. However, you can modify and extend this behavior simply by applying custom filters. Add them as include-filter or exclude-filter sub-elements of thecomponent-scan element. Each filter element requires the type and expression attributes. The following table describes the filtering options.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd">
        <context:annotation-config />
        <context:component-scan base-package="com.bjsxt"/>

    </beans>

    scan:扫描。表示扫描某个包和其自包,将能作为组件(添加了@Component)的内容解析出来。

    package com.bjsxt.dao.impl;

    import org.springframework.stereotype.Component;

    import com.bjsxt.dao.UserDAO;
    import com.bjsxt.model.User;

    @Component("u") //这样写表示这个类是一个组件,在另外一个类看来它就是一个资源。不指定它的key默认会是userDAOImpl(即类名首字母改成小写)

    public class UserDAOImpl implements UserDAO {

        public void save(User user) {
            //Hibernate
            //JDBC
            //XML
            //NetWork
            System.out.println("user saved!");
        }

    }

    package com.bjsxt.service;
    import javax.annotation.Resource;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Component;

    import com.bjsxt.dao.UserDAO;
    import com.bjsxt.model.User;


    @Component("userService")
    public class UserService {
       
        private UserDAO userDAO; 
       
        public void init() {
            System.out.println("init");
        }
       
        public void add(User user) {
            userDAO.save(user);
        }
        public UserDAO getUserDAO() {
            return userDAO;
        }
       
        @Resource(name="u")
        public void setUserDAO( UserDAO userDAO) {
            this.userDAO = userDAO;
        }
       

       
        public void destroy() {
            System.out.println("destroy");
        }
    }

    额外的一些内容:

    <bean id="userService" class="com.bjsxt.service.UserService" init-method="init" destroy-method="destroy" scope="prototype">

    scope对应的注解是@Scope(“”)

    init-method对应的注解是@PostConstruct,表示构造完成之后再执行它注解的方法。

    destroy-method对应的注解是@PreDestroy,容器销毁之前。

  • 相关阅读:
    Eclipse
    Plumtree领跑Web应用
    WebLogic
    BEA的闪电发迹
    BEA:如何破除10亿“魔咒”?
    文档化BPM Studio流程
    Eclipse 快捷键
    BEA Systems将收购Plumtree软件公司
    (TOJ1433)正整数解
    (TOJ3576)找规律
  • 原文地址:https://www.cnblogs.com/flying607/p/3485227.html
Copyright © 2011-2022 走看看