Spring Bean的定义及注入Value

Spring Bean的定义及注入Value

实验楼的学习资料,记录一下
Spring bean的定义有三种方式:

  • 基于XML的配置
  • 基于注解的配置
  • 基于java类的配置
    bean的注入有两种方式:基于构造函数的依赖注入和基于设值函数的依赖注入
基于XML的配置方法

基于XML的配置方法又分为三种写法:一般方法,缩写方法,pchema方法。先看下面的Bean:
FileNameGenerator.java,其中包含两个properties,name,type,我们向两个properties注入value
pom.xml

<name>bean</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.1.1.RELEASE</spring.version>

    </properties>

FileNameGenerator.java类

public class FileNameGenerator {
     private String name;
     private String type;

     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
      public String getType() {
         return type;
     }
    public void setType(String type) {
       this.type = type;
   }
    /*
    *打印文件名和文件类型的方法
    */
    public void printFileName() {
       System.out.println("FileName & FileType  is  :  "+name+" & "+type);
    }
}

SpringBeans.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="FileNameGenerator" class="com.shiyanlou.spring.bean.FileNameGenerator">
        <property name="name">
            <value>shiyanlou</value>
        </property>
        <property name="type">
            <value>txt</value>
        </property>
    </bean>
    <!-- 另一重配置方法 缩写方法-->
    <!-- 
        <bean id="FileNameGenerator" class="com.shiyanlou.spring.bean.FileNameGenerator">
               <property name="name" value="shiyanlou" />
               <property name="type" value="txt" />
           </bean>
     -->
</beans>

第三种方法:“p”schema方法

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--<bean id="FileNameGenerator" class="com.shiyanlou.spring.bean.FileNameGenerator">
        <property name="name">
            <value>shiyanlou</value>
        </property>
        <property name="type">
            <value>txt</value>
        </property>
    </bean>-->
    <bean id="FileNameGenerator" class="com.shiyanlou.spring.bean.FileNameGenerator"
             p:name="shiyanlou" p:type="txt" />
</beans>

这种方法需要在bean的配置文件xml中加入声明

xmlns:p="http://www.springframework.org/schema/p"

最后写个App.java

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.shiyanlou.spring.bean.FileNameGenerator;

public class App 
{
     private static ApplicationContext context;

        public static void main( String[] args )
        {
            context = new ClassPathXmlApplicationContext("SpringBeans.xml");

            FileNameGenerator obj = (FileNameGenerator) context.getBean("FileNameGenerator");
            obj.printFileName();
        }
}
基于注解的配置

注解是为 Spring 容器提供 Bean 定义的信息,把 XML 定义的信息通过类注解描述出来。众所周知,Spring容器三大要素:Bean 定义、 Bean 实现类以及 Spring 框架。如果采用 XML 配置,Bean 定义和 Bean 实现类本身分离,而采用注解配置,Bean 定义在 Bean 实现类上注解就可以实现。在后面我我们会有一节实验专门讲解基于注解的配置,以下先简单列举几个注解方式:

  • @Component
    被此注解标注的类将被Spring容器自动识别,自动生成Bean定义即:
@Component("shiyanlou")
public class shiyanlou{

}

与在XML中配置一下效果相同

<bean id="shiyanlou" class="com.shiyanlou.spring.shiyanlou">

除此之外,Spring有三个与@Component等效的注解
@Controller:对应表现层的 Bean,也就是 Action 。
@Service:对应的是业务层 Bean 。
@Repository:对应数据访问层 Bean 。

  • @Autowired
    @Autowired 可以用来装配 bean,都可以写在字段上,或者方法上。使用 @Autowired,首先要在在 applicationContext.xml 中加入 @Autowired 默认按类型装配,默认情况下要求依赖对象必须存在,如果要允许 null 值,可以设置它的 required 属性为 false 。例如:
@Autowired()
@Qualifier("shiyanlouDao")
private ShiyanlouDao shiyanlouDao;
  • Configuration
    通过使用注释@Configuration告诉Spring,这个Class是Spring的核心配置文件,并且通过使用注解@Bean定义bean
    例子
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean(name="animal")
    public IAnimal getAnimal(){
        return new Dog();
    }
}

App.java

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {

    private static ApplicationContext context;

    public static void main(String[] args) {
        context = new AnnotationConfigApplicationContext(AppConfig.class);
        IAnimal obj = (IAnimal) context.getBean("animal");
        obj.makeSound();

    }

}

通过上面的 @Configuration 注解,相当于在 ApplicationContext.xml 文件中添加如下配置,使用了 @Configuration+@Bean 就不需要添加了:

<bean id="animal" class="com.shiyanlou.spring.java_config.Dog">
发布了5 篇原创文章 · 获赞 0 · 访问量 166
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览