(16)spirng注解

配置注解生效

<context:annotation-config/>

<?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"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd 
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        
        <context:annotation-config/>
        
        <bean id="hi" class="shuai.spring.study.Hi"/>
        
        <!-- setter注入 -->
        <bean id="hello" class="shuai.spring.study.HelloImpl6">
        	<property name="hi" ref="hi"/>
        </bean>
        
        <!-- 构造器注入 -->
        <!-- <bean id="hello1" class="shuai.spring.study.HelloImpl6">
        	<constructor-arg index="0" ref="hi"/>
        </bean> -->


</beans>

测试方法

package shuai.spring.test;

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

import shuai.spring.study.HelloApi;

public class HelloTest {
    @Test
    public void testHelloWorld() {

        @SuppressWarnings("resource")
        ApplicationContext context = new ClassPathXmlApplicationContext("HelloWorld.xml");

        HelloApi helloApi = context.getBean("hello", HelloApi.class);
        helloApi.sayHello();
    }
}


spring自带注解

@Required,应该只是一种检查

正常依赖注入可以根据构造方法注入或者setter注入

但是如果在setter方法加入@Required那就只能setter注入了,这时如果构造器注入打开,加载xml文件的时候就会报错。

package shuai.spring.study;

import org.springframework.beans.factory.annotation.Required;

public class HelloImpl6 implements HelloApi {
    private Hi hi;

    public HelloImpl6() {
    }

    public HelloImpl6(Hi hi) {
        this.hi = hi;
    }

    public Hi getHi() {
        return hi;
    }

    @Required
    public void setHi(Hi hi) {
        this.hi = hi;
    }

    @Override
    public void sayHello() {
        hi.saHi();
    }

}

@Autowired,自动装配,可以在属性,构造方法,setter方法上面加注解,普通方法也可以,只要有参数就行,方法体能为属性赋值就就行。xml只要写好bean就可以了,不用给属性注入值。

个人理解:@Autowired相当与把方法参数注入值,并且执行有注解的方法。

如果没有可用资源会报错,@Autowired(required = false)

如果有多个资源不知道选哪个,可以在参数前加@Qualifier("名称"),默认是根据类型注入,加了@Qualifier则变为根据名称注入

package shuai.spring.study;

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

public class HelloImpl6 implements HelloApi {

    private Hi hi;

    public HelloImpl6() {
    }

    public HelloImpl6(Hi hi) {
        this.hi = hi;
    }

    public Hi getHi() {
        return hi;
    }

    public void setHi(Hi hi) {
        this.hi = hi;
    }

    @Autowired(required = false)
    public void test(@Qualifier("hi") Hi hi) {
        System.out.println(hi);
        this.hi = hi;
    }

    @Override
    public void sayHello() {
        hi.saHi();
    }

}


<?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"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd 
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        
        <context:annotation-config/>
        
        <bean id="hi" class="shuai.spring.study.Hi"/>
        
        <bean id="hi1" class="shuai.spring.study.Hi"/>
        
        <!-- setter注入 -->
        <bean id="hello" class="shuai.spring.study.HelloImpl6">
        	<!-- <property name="hi" ref="hi"/> -->
        </bean>
        
        <!-- 构造器注入 -->
        <!-- <bean id="hello1" class="shuai.spring.study.HelloImpl6">
        	<constructor-arg index="0" ref="hi"/>
        </bean> -->


</beans>

还是上面的测试
输出结果:

shuai.spring.study.Hi@4b9e255
hi

也可以这样

<bean id="hi1" class="shuai.spring.study.Hi">
        <qualifier value="hi2"/>
</bean>

这样hi1将失效,

如果这样

<bean id="hi1" class="shuai.spring.study.Hi">
        <qualifier value="hi2"/>
        <qualifier value="hi3"/>
</bean>

hi1、hi2都失效,hi3有效

JSR-250注解

@Resource:自动装配,默认根据类型装配,如果指定name属性将根据名字装配,和@Autowired不同的是可以指定name来根据名字注入。


其它的看开涛老师的:http://jinnianshilongnian.iteye.com/blog/1457224


Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值