栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring框架学习 注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring框架学习 注解

在自学刷视频的时候,学会了xml文件的一些知识,了解了底层实现的过程,哈哈哈哈感觉xml文件真的香啊!工厂订单出现,拿走去做就可以了,像咱这种类的定义者就不需要自己new个实例对象了。可是!可恶!怎么还会出现个注解,整天@这个@那个很牛的好吧?替代了真香的xml文件,达到了解耦吗?我感觉xml文件的解耦能力好一些,当然我也不是大佬,水鸟级理解而已啦。


下面我们来进行注解的测试,相关的功能会在代码里展示说明,我是有写注释的习惯,可是注释的格式和规范还没有系统的学习调整,大家都知道,spring IOC 控制反转的核心技术就是DI注入,也就是俗话说的依赖注入,至于AOP这么难的面向切面编程技术我打算把spring web过了在研究。回来说DI注入,xml文件的bean标签几乎就有很重要的地位,我们在java包里写好了接口,并用impl类去实现接口中的所有方法与属性,以往我们需要自行new一个新对象在实现类的实例化,而spring容器借助自己的控制反转技术(个人觉得这跟java语言基础里的反射脱离不了关系,反射yyds)在我们眼里成为了封装好一切工具与操作过程的容器,这时我们需要实例化一个对象就变成了bean实例,spring容器通过给出的xml文件去解读其中注入的依赖信息,结合反射技术给你制造你想要的那个实例,只不过现在称为商品(bean实例),之前你自己做的叫自制品(new来的对象)。xml文件充当的中间作用极其重要,可是注解的出现解决了xml文件语句繁多时造成的困扰。


注解有原始注解与新注解:


原始注解有:@component("id")组件,注在想要注入的类上面(相当于bean标签含id含class的样子),它的三个孩子和它做一样的事情只不过名字不一样:@Repository(dao层)@Service(Service层)@controller(controller层);@Autowired + @Qualifier("id") == @Resource("id")  在与id对应的调用bean字段上根据类型进行依赖注入的时候使;@value("${变量名}")注入普通数据类型的变量时使用(常用的地方:${变量名},标注一下:${jdbc.driver});@Scope('"prototype")还记得Scope的值是来决定bean的作用域的,决定实例化的bean对象是单个对象还是多个对象;@PostConstruct:初始化方法注解;@PreDestroy:销毁方法注解。


新注解嘛,就不写了,个人感觉新注解需要借助java核心配置类才能实现作用,所以用原始注解加xml文件会更适合做项目。如果有好的意见希望大家在坑外拉一把我。


1、主要借助UserServiceImpl与UserDaoImpl进行测试:

UserService

package com.hlc.service;

public interface UserService {
    public void save();
}
UserDao
package com.hlc.dao;

public interface UserDao {
    void save();
    void init();
    void destroy();
}
UserServiceImpl
package com.hlc.service;

import com.hlc.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

//原始注解的作用仅限于自定义的bean,如果说库里的jar包中的一些类或者xml中context相关,import相关,原始注解无法解决这些问题。
//新注解的引用无疑是一个好东西!可是!个人觉得新注解需要建立java的核心配置类,感觉用xml舒服一些,怎么舒服怎么来了。

@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService{
//普通数据类型注入采用Value注解,常用的地方:${变量},标注一下:${jdbc.driver}
    @Value(value = "${jdbc.driver}")
    private String ServiceName;
//在对应的调用bean字段上根据类型依赖注入的时候需要加上这个Autowired注解,加上后spring容器会将与
//注解字段匹配的bean注入,所以这里就是去掉@Qualifier结果也会产生。但是如果属于字段类型的
//bean有多个,就会冲突了。
    @Autowired
//结合Autowired适用于根据id进行依赖注入,一定要结合Autowired一起用。
    @Qualifier("userDao")
//    @Resource(name = "userDao")功能相当于上述两个注解一起用
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
        System.out.println(ServiceName);
        userDao.save();
        userDao.init();
        userDao.destroy();
    }

}
UserDaoImpl
package com.hlc.dao;

import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Repository("userDao")
//这里的Component的作用就相当于xml文件中的
//都是为了实例化bean对象做服务的,相当于给容器一张图纸信息,容器反射获取并生成,这就是IOC技术的体现。
public class UserDaoImpl implements UserDao{

    public void save() {
        System.out.println("save......");
    }
//这里是初始化方法注解
    @PostConstruct
    public void init(){
        System.out.println("init...");
    }
//这里是销毁方法注解
    @PreDestroy
    public void destroy(){
        System.out.println("destroy....");
    }
}

2、测试类Test.java

import com.hlc.service.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
@org.junit.Test
    public void test(){
//    这里在上一次测试总结过,要想使用close();就得升级创建客户端接口。
    ClassPathXmlApplicationContext  applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserServiceImpl userService = applicationContext.getBean(UserServiceImpl.class);
    System.out.println(userService);
    userService.save();
    applicationContext.close();
//测试注解Scope的作用是否有效,上一句关闭了applicationContext客户端,所以容器已经无法使用,这两行代码还是注掉为妙。
//    UserServiceImpl userService1 = applicationContext.getBean(UserServiceImpl.class);
//    System.out.println(userService1);
    }
}

3、xml文件




    
    

    
    

4、properties文件

jdbc.driver=com.mysql.jdbc.driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456

5、pom文件



    4.0.0

    org.example
    springZj
    1.0-SNAPSHOT

    

        
            org.springframework
            spring-context
            5.3.15
        

        
            junit
            junit
            4.13.2
            test
        

    
    
        8
        8
    

在自学spring基础的过程中,感觉都是新的知识点,But we must be insisting.......

我是水鸟,我是水鸟,越学越感觉还有好多要学,抓紧学。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754980.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号