Spring注解开发

本文详细介绍了Spring框架中注解的使用方法,包括基础注解如@Component、@Service等的用途,以及如何通过注解进行对象和基本数据类型的注入。同时,文章还介绍了Spring 5.0以上版本的新注解,例如@Configuration、@ComponentScan等,帮助读者更好地理解并应用这些注解。

目录

1、Spring注解开发(注入对象)

1.1、Spring原始注解开发

1.2、环境搭建

1.3、创建dao层和service层

1.4、创建测试类 

1.5、解决报错,配置xml文件 

2、Spring注解开发(注入基本数据类型)

2.1、创建jdbc.properties配置文件

2.2、applicationContext.xml配置文件引入jdbc.properties配置文件

3、Spring新注解

3.1、注解优化

3.2、注解说明 

3.3、开发步骤


1、Spring注解开发(注入对象)

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解替代xml配置文件可以简化配置,提高开发效率。

1.1、Spring原始注解开发

注解说明
@Component使用在类上用于实例化Bean
@Controller使用在web层上用于实例化Bean
@Service使用在service层类上用于实例化Bean
@Repository使用在dao层类上用于实例化Bean
@AutoWirde使用在字段上用于根据类型依赖注入
@Qualifier结合@AutoWride一起使用用于根据名称进行依赖注入
@Resource相当于@Autowired+@Qualifier,按照名称进行注入
@Value注入普通属性
@Scope标注Bean的作用范围
@PostConstruct使用在方法上标注该方法是Bean的初始化方法
@PreDestoy使用在方法上标注该方法是Bean的销毁方法

1.2、环境搭建

在maven项目下的pom文件中导入spring的依赖和junit测试依赖。

<dependencies>
 <!--spring容器依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>
 <!--junit测试依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
</dependencies>

1.3、创建dao层和service层

创建dao层和service层以及对应的实现类 

userDao类,注解都是放到实现类的,所以这里没有注解

public interface UserDao {
    void show();
}

userDaoImpl类,注意这里也可以用@Component,只不过为了方便区分,这里用的是@Repository,这个注解是专门为dao层设计的。

@Repository("userDao")
public class UserDaoImpl implements UserDao {
    public void show() {
        System.out.println("userDao running");
    }
}

userService接口 

public interface UserService {
    void  show();
}

userServiceImpl实现类,注意:@Service就是service层专门设计的注解写法,与上面同理,也可以用@Component,为了方便理解和区分,这里建议写@Service。这里的@Autowired可以单独使用,可以省略@Qualifier,而如果用@Resource注解的意思就是@Autowired+@Qualifier,简化了代码。 

@Service("userService")
public class UserServiceImpl implements UserService {
    @Value("${jdbc.Driver}")
    private  String driver;
    // @Autowired//按照数据类型从spring容器中进行匹配的
    // @Qualifier("userDao") //按照id名称值从容器中进行匹配的,此处@Qualifier要结合@Autowired一起使用
    @Resource(name = "userDao")//相当于@Autowired+@Qualifier
    private UserDao userDao;


    public void show() {
        System.out.println(driver);
        userDao.show();
    }
    @PostConstruct
    public void init(){
        System.out.println("初始化方法");
    }
    @PreDestroy
    public void destoy(){
        System.out.println("摧毁方法");
    }
}

1.4、创建测试类 

在测试包下创建controller层,进行测试。 

 UserController类

public class UserController {
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = app.getBean(UserService.class);
        userService.show();
    }
}

点击进行测试 

可以看到报错了,为什么会报错呢?原因就是因为目前虽然写注解了,但是没有告诉spring,它并不知道你要进行注解开发,所以需要在配置文件中告诉spring,我要用注解开发,你去寻找这些注解。

1.5、解决报错,配置xml文件 

在resources包下,创建配置文件 

<?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">
       <!--加入这段代码告诉spring去扫描整个项目包寻找注解-->
       <context:component-scan base-package="cn.itssl"/>
</beans>

再次测试

成功运行!

2、Spring注解开发(注入基本数据类型)

2.1、创建jdbc.properties配置文件

jdbc.Driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test1?useSSL=false
jdbc.user=root
jdbc.password=root

2.2、applicationContext.xml配置文件引入jdbc.properties配置文件

注意:需要在beans属性中加入以下端代码

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

 在xsi:schemLoation中加入下面路径

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

最终配置文件内容为

​
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--引入jdbc配置文件-->
<context:property-placeholder location="jdbc.properties"/>
</beans>

​

userServiceImpl类

@Service("userService")
public class UserServiceImpl implements UserService {
    //@Value注解内容填入对应jdbc配置文件的key值,注入到定义的driver变量
    @Value("${jdbc.Driver}")
    private  String driver;
    // @Autowired//按照数据类型从spring容器中进行匹配的
    // @Qualifier("userDao") //按照id名称值从容器中进行匹配的,此处@Qualifier要结合@Autowired一起使用
    @Resource(name = "userDao")//相当于@Autowired+@Qualifier
    private UserDao userDao;
    public void show() {
        System.out.println(driver);
        userDao.show();
    }
}

启动测试类

public class UserController {
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = app.getBean(UserService.class);
        userService.show();
    }
}

打印出jdbc.properties配置文件中的jdbc.driver对应的值,运行成功!

3、Spring新注解

Spring新注解是spring5.0以上版本才可以使用的,如果版本过低是不能使用的。

3.1、注解优化

使用以上的注解还不能全部替代xml配置文件,还需要使用注解替代的配置有以下几种:

非自定义的Bean的配置:<bean>

加载properties文件的配置:<context:property-placeholder>

组件扫描的配置:<context:component-scan>

引入其他文件:<import>

3.2、注解说明 

注解说明
@Configuration用于指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解
@ComponentScan

用于指定Spring在初始化容器时要扫描的包

作用和在Spring的xml配置文件中的

<context:component-scan base-package="com.xxx"/>一样

@Bean使用在方法上,标注将该方法的返回值存储到Spring容器中
@PropertySource用于加载.properties文件中的配置
@Import用于导入其他配置类

使用新注解能够让我们抛弃掉xml配置文件的繁琐,等于说把xml配置的活都交给了spring注解来做,所以applicationContext.xml配置文件我们就可以用一个类来替代它,就是配置类。

之前使用xml配置构造一个dataSource的数据源,我们需要在xml配置文件中进行配置。

那我们如何使用注解形式去配置数据源呢?

<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.xsd
                          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--引入jdbc.properties配置文件-->
<context:property-placeholder location="jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.Driver}"></property>
    <property name="url" value="${jdbc.url}"></property>
    <property name="username" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>

</beans>

请看下面新注解的开发步骤,就可以舍弃xml配置文件的形式,使用纯注解进行开发。

3.3、开发步骤

在config包下创建DataSourceConfiguration配置数据源

//定义该类为配置类,使用@Configuration告诉spring
@Configuration
//导入jdbc.propertes配置文件,相当于xml配置的<context:property-placeholder location="jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {
    //利用@Value注解来注入值到变量
    @Value("${jdbc.Driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.user}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    //使用@Bean注解来使此方法返回值放入Bean容器中,并起名字为dataSource
    @Bean("dataSource")
    public DataSource getDataSource(){
        //测试手动创建Druid数据源
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return  dataSource;
    }
}

我们创建一个config包,在包下创建一个配置类,类名叫SpringConfiguration,这是主配置文件,因为需要用到数据源配置文件,则通过@Import来进行导入dataSourceConfiguration配置文件。

//定义为配置类
@Configuration
//扫描spring注解 相当于xml配置的<context:component-scan base-package="cn.itssl"/>
@ComponentScan("cn.itssl")
//引入datasource配置类
@Import(DataSourceConfiguration.class)
public class SpringConfiguration {

}

在test测试包下进行测试

注意:这里用到的ApplicationContext下的子类就不再是之前的ClassPathXml...那个了,就需要用到支持配置类的AnnotationConfigApplicationContext类,里面填写的参数就是配置类。使用反射进行获取。

 @Test
    public void  test5() throws Exception{
        ApplicationContext app=new AnnotationConfigApplicationContext(SpringConfiguration.class);
        DataSource dataSource = (DataSource) app.getBean("dataSource");
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

运行成功!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值