Spring 进阶(5) 使用注解配置bean(1)

  1. 可以在为类配置注解,然后在配置文件中指定哪一个包下有注解的类都注册成java bean,spring没有使用约定由于配置的做法,根据注解配置bean的类的路径要显式指定。
  2. 要特别指出的是,这些通过注解的bean,spring给他们的id是将类名全部改成小写字母
  3. 天道酬勤,来吧
    package InstanceClass;
    
    import org.springframework.stereotype.Component;
    //使用Component说明要spring把这个类当成普通的javabean注册,其实还可以注册成为其他的类的
    @Component
    public class ClassA {
        private String name;
    
         void setName(String name) {
            this.name = "ok";
        }
    
        public void thisIsMyName(){
            System.out.println("A' s name is " + name);
        }
    }
    
    package InstanceClass;
    
    
    import org.springframework.stereotype.Component;
    //同上
    @Component
    public class ClassB {
        private String name;
    
         void setName(String name) {
            this.name = "ok1";
        }
    
        public void thisIsMyName(){
            System.out.println("B' s name is " + name);
        }
    }
    
    package TestPackage;
    
    import InstanceClass.ClassA;
    import InstanceClass.ClassB;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    //测试类
    public class SpringTest {
        public static void main(String []args){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
            ClassA classA = applicationContext.getBean("classA", ClassA.class);
           System.out.println(classA.toString());
    
            ClassB classB = applicationContext.getBean("classB", ClassB.class);
          System.out.println(classB.toString());
    
        }
    }
    
    <?xml version="1.0" encoding="GBK"?>
    <!--要使用注解的话,就要先引入对应的配置-->
    <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-4.0.xsd
    	http://www.springframework.org/schema/context
    	http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
        <!--显式指定要在那个路径下自动配置bean-->
        <context:component-scan base-package="InstanceClass"/>
    
    </beans>
  4. 然后介通过注解来指定bean的作用域(是每次产生一个实例呀,还是单例模式)

    1. 这就是为bean的实现类添加@scope注解,像这样,在scope注解的参数就是指定它的作用域了。

      
      @Scope("prototype")
      @Component("classA")
      public class ClassA {
      ......
      }
  5. 是不是发现还差了一个很重要的地方?对!类成员变量的赋值,怎能少了这个呢?

    1. 实现方法是使用@Resource和@Value注解,@Resource注解的作用等同于在配置文件中 使用ref,@value就是直接赋值啦,少侠看招!

      1. 首先是一个很大的坑,就是我的jdk里没有javax.Annotaion这个包,还得我自己去下载后添加进去,添加包操作以前说过啦,就是File->Project Structure-> + >选择要的包,点击确定。我把我找到的包分享出来,居然有人拿这个卖五个c币,过分。。。大家需要什么包可以留言,我可以试试看帮你们找找,义务。javax.annotation jar

      2. 然后就是代码啦,在ClassA里增加一个ClassB的成员变量,然后注解,需要特别指出的是,这两个注解可以对set方法注解,也可以直接对值注解,当对值注解的时候,可以去掉set方法。

        package InstanceClass;
        
        
        
        
        
        
        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.context.annotation.Scope;
        import javax.annotation.*;
        import org.springframework.stereotype.Component;
        
        //使用Component说明要spring把这个类当成普通的javabean注册,其实还可以注册成为其他的类的
        
        @Scope("prototype")
        @Component("classA")
        public class ClassA {
        
            @Value("classA")
            private String name;
        
        
            private ClassB classB;
        
            @Resource(name = "classB")
            public void setClassB(ClassB classB) {
                this.classB = classB;
            }
        
            public ClassB getClassB(){
                return classB;
            }
        
            public void thisIsMyName(){
                System.out.println("A' s name is " + name);
            }
        }
        
  6. 这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。

猜你喜欢

转载自blog.csdn.net/weixin_39452731/article/details/84892749