Spring(二) 注解

2019-12-10  本文已影响0人  So_ProbuING

Spring(二) 注解

Spring中常用注解介绍

Spring中的注解配置和xml配置要实现的功能是一样的

注解开发环境

引入maven坐标

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

开启组件扫描

<context:component-scan base-package="com.itheima"/>

IOC注解说明

IOC注解都必须放在想要被IOC容器管理的类上:

意思就是告诉spring,利用这个类创建一个对象,并且将对象放到spring的IOC容器中。

相当于xml中的<bean id="accountDao" class=""/> 可以使用这种形式指定一个id,如果不指定默认为类名首字母小写

bean对象作用域注解

bean对象创建创建后和摧毁前触发行为

<bean init-method="init" destroy-method="destory"/>

DI注解说明

DI注解都相当于直接给属性赋值,而无需借助于set方法或构造方法

测试案例

Spring配置文件applicationContext.xml配置

<!--    配置注解扫描 配置扫描全部包-->
    <context:component-scan base-package="com.itheima"/>

使用注解将dao放入容器

@Repository
public class AccountDaoImpl implements AccountDao 

使用注解将service放入容器

@Service
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountDao accountDao;

测试

@Test
    public void testFindAll() {

        //启动Spring容器
        ApplicationContext act =
                new ClassPathXmlApplicationContext("applicationContext.xml");

        AccountService service = act.getBean(AccountService.class);

        List<Account> accounts = service.findAll();
        for (Account account : accounts) {
            System.out.println(account);
        }
    }

Spring新注解

@Configuration

用于指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解,被这个标签标注的类,会在Spring容器启动的时候,自动加载

@Bean

该注解只能写在方法上,表明使用此方法创建一个对象,并且放入Spring容器。它支持一个name属性,用于给生成的bean取一个id

Bean只能标注在方法上,用于将当前方法返回的对象,返回的对象放入Spring的IOC容器

可以使用@Bean(id)来指定当前对象在容器中的id,如果不指定,默认是当前方法的名称。

它还完全有@Autowired标注在方法上的作用

@ComponentScan

组件扫描注释,相当于xml配置文件中的<context:component-scan base-package=""/>

@PropertySource

用于加载.properties文件中的配置。

@Import

在一个配置类中引入其他配置

Spring纯注解开发

创建DBConfig

//自动加载配置
@Configuration
@PropertySource("db.properties")
public class DBConfig {
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String name;
    @Value("${jdbc.password}")
    private String password;
    @Value("${jdbc.driver}")
    private String driver;

    @Bean("dataSource")
    public DataSource getDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setPassword(password);
        dataSource.setUsername(name);
        dataSource.setUrl(url);
        return dataSource;
    }

    public QueryRunner getQueryRunner(@Qualifier("dataSource") DataSource dataSource) {
        return new QueryRunner(dataSource);
    }
}

创建java类作为配置类

@ComponentScan("com.itheima")
@Import(DBConfig.class)
public class SpringConfig {

}

测试

 @Test
    public void findByName() {
        ApplicationContext act = new AnnotationConfigApplicationContext(SpringConfig.class);
        AccountService service = act.getBean(AccountService.class);
        Account account = service.findByName("test2");
        System.out.println(account);
    }

Spring整合Junit

引入坐标

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>

在测试类上使用@RunWith指定Spring的单元测试运行器

@RunWith(SpringJUnit4ClassRunner.class)
public class SpringJunitTest {
}

使用@ContextConfiguration指定配置文件,它支持文件和类的形式

//指定配置文件
@ContextConfiguration(classes = SpringConfig.class)

可以使用@Autowired直接注入需要的bean

 @Autowired
    private AccountService service;

    @Test
    public void testFindByName() {
        System.out.println(service.findByName("test1").toString());
    }
上一篇 下一篇

猜你喜欢

热点阅读