spring_annotation_day_01

Spring注解开发

今天学习Spring的第一天,大家一起跟着我动手搭建环境,最后一定会有收获。

开发流程:主要是使用idea来完成的,此教程是针对有spring开发经验的人看的。用来对比以前的配置文件来注入依赖和java类配置来注入依赖的区别。

打开idea创建Maven工程,输入三个坐标,groupId,artifactId,version。
我们这里的三个坐标是:

<groupId>com.liuzhuo</groupId>
<artifactId>spring-annotation</artifactId>
<version>1.0-SNAPSHOT</version>

创建后的工程如下:


现在打开pom.xml文件:添加依赖如下

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.9.RELEASE</version>
        </dependency>
</dependencies>

更新pom文件,会自动导入jar包。


在src下的main下的java中创建Person类。我的包名是com.liuzhuo.bean
Person类中主要是两个字段,一个name,一个age,如图:

public class Person {
    private String name;
    private Integer age;

    ···中间省略了无参、有参的构造函数和getter、setter方法以及toString方法.    
}

现在在main下的resources下创建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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--以前的开发模式,使用配置文件-->
    <bean id="person" class="com.liuzhuo.bean.Person">
        <property name="name" value="zhangsan"/>
        <property name="age" value="18"/>
    </bean>

</beans>

现在在com.liuzhuo包下创建MainTest类:

public class MainTest {

    public static void main(String[] args) {

        //以前的开发模式,使用xml来配置bean
        ClassPathXmlApplicationContext applicationContext = new                            ClassPathXmlApplicationContext("bean.xml");
        Person person = (Person) applicationContext.getBean("person");
        System.out.println(person);

    }
}

输出结果:就是在配置文件中的配置的person类。

Person{name='zhangsan', age=18}


现在创建com.liuzhuo.config包,并创建MainConfig类:

//配置类==配置文件
@Configuration   //告诉spring这是一个配置类,用来生成bean
public class MainConfig {

    //给容器中注册一个Bean;类型为返回值的类型,id默认为方法名
    @Bean
    public Person person() {
        return new Person("lisi", 16);
    }
}

修改MainTest类:

public class MainTest {

    public static void main(String[] args) {

        //以前的开发模式,使用xml来配置bean
        /*ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        Person person = (Person) applicationContext.getBean("person");
        System.out.println(person);*/

        //现在使用java类来配置上下文容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
        Person person = context.getBean(Person.class);
        System.out.println(person);
    }
}

输出结果:是MainConfig类中配置Person类(@Bean注解的类)

Person{name='lisi', age=16}

在配置文件类必须使用@Configuration注解,然后再注入自己想要的Bean对象
创建一个方法,使用@Bean注解,返回值就是注入到容器中的Bean类型,默认情况下方法名就是注入到容器中的id。

@Bean注解()中,可以输入参数,其中就有value来修改Bean的id名,如下:

public class MainConfig {

    //给容器中注册一个Bean;类型为返回值的类型,id默认为方法名
    @Bean(value = "person01") //修改了Bean的id为person01
    public Person person() {
        return new Person("lisi", 16);
    }
}

在MainTest文件中输入获取Person类的名字:

  //现在使用java类来配置上下文容器
  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
  Person person = context.getBean(Person.class);
  System.out.println(person);

  String[] beanNames = context.getBeanNamesForType(Person.class);
  for(String name:beanNames){
        System.out.println(name);
  }

输出结果:

Person{name='lisi', age=16}
person01

说明此时,Bean的id名字是被@Bean(value=”person01”)给替换了,不再是方法名person了。


  目录