spring注解总结

Spring注解使用:

【步骤一】

定义注解扫描文件包

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

【步骤二】

实体类添加注解 @Repository

@Repository
public class User extends ParUser{
    private Integer id;
    private String name;
    private String password;
    private String address;
    private Address add;

    public Address getAdd() {
        return add;
    }

    public void setAdd(Address add) {
        this.add = add;
    }

    public User() {

    }

    public User(Address add) {
        this.add = add;
    }

    public User(Integer id, String name, String password, String address, Address add) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.address = address;
        this.add = add;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", address='" + address + '\'' +
                ", add=" + add +
                '}';
    }
}

测试结果:

public class Testdemo {
    public static void main(String[] args) throws SQLException {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ioc.xml");
        User user = applicationContext.getBean("user", User.class);
        System.out.println(user);
    }
}

完成自动注入过程

在这里插入图片描述
一般来说:
(1)@Service:放在业务逻辑层
(2)@Repository:放在数据库访问层
(3)@Controller:控制层
(4)@Component:组件,放在任意类上都可以bean注册
@Scope(value=“singleton”)可以是单例或者多例模式prototype

总结:

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

可以有很多的属性值设置:
(1)默认情况下全部扫描文件加,可以添加use-default-filter="false"关闭自动全部扫描

<!--排除包中的某些类-->
 <context:exclude-filter type="" expression=""/> 
 <!--包括包中的某些类--->
 <cotext:include-filter tyle="" expression=""/>

type:过滤的类型
(1)annotation:按照注解排除进行排除
在这里插入图片描述
(2)assinable:排除某一个具体的类,表达式时类的完全限定名
在这里插入图片描述
(3)aspectj:aspectj表达式
(4)custom:自定义排除规则
(5)regex:使用正则表达式

自动注入@Autowired

属性值的自动注入案例:

@Repository
public class UserDao {
    public void save(){
        System.out.println("保存");
    }
}
@Controller
public class UserController {
	//自动注入功能,原来我们时UserDao userDao = new UserDao(),现在我们交给IOC容器,帮助我们管理,我们需要的时候自动给我们创建对象即可
    @Autowired
    private UserDao userDao;
    public void save(){
        userDao.save();
    }
}

执行结果

在这里插入图片描述
默认情况下时按照byType进行匹配的
在这里插入图片描述
在这里插入图片描述
如果有两个类型满足,则按照名称进行查找,如果名称对不上则会报错
测试用例

@Repository
public class UserDao {
    public void save(){
        System.out.println("保存test1");
    }
}
@Repository
public class UserDao1 extends UserDao {
    public void save(){
        System.out.println("保存test2");
    }
}

@Controller
public class UserController {
    @Autowired
    private UserDao userDao1;
    public void save(){
        userDao1.save();
    }
}

在这里插入图片描述
在这里插入图片描述
证明结论,先按类型进行查找,类型匹配的话并且只有一个类型直接注入,如果有多个类型,则再按照名称进行查找,如果名称找不到则报错

可以使用注解@Qualifier方式规定使用的哪个类的名称测试结果如下:
在这里插入图片描述
在这里插入图片描述
@Resource按照名称进行装配,JDK注解,扩展性好
@Autowired时按照类型进行匹配,Spring注解,只适用于Spring框架

@AutoWired还适用于方法上,bean创建的时候会自动调用,方法的每一个参数都会有自动注入值
在这里插入图片描述
测试方法:

@Controller
public class UserController {
    @Autowired
    public void save(UserDao userDao){
        userDao.save();
    }
}
public class Testdemo {
    public static void main(String[] args) throws SQLException {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ioc.xml");
        //UserDao userController = applicationContext.getBean( "userDao", UserDao.class);
        //userController.save();
    }
}

在这里插入图片描述

泛型自动注入

(1)创建实体类并注入容器

@Repository
public class Teacher {
}
@Repository
public class Student {
}

(2)dao层创建接口 BaseDao

public  interface BaseDao <T>{
    public void save();
}

(3)StudentDao实现类

@Repository
public class StudentDao implements BaseDao<Student> {
    @Override
    public void save() {
        System.out.println("保存学生数据");
    }
}

(4)TeacherDao实现类

@Repository
public class TeacherDao implements BaseDao<Teacher> {
    @Override
    public void save() {
        System.out.println("保存老师数据");
    }
}

(5)TeacherService类

@Service
public class TeacherService{
    @Autowired
    private TeacherDao teacherDao;
    public void save(){
        teacherDao.save();
    }
}

(6)StudentService类

@Service
public class StudentService{
    @Autowired
    private StudentDao studentDao;
    public void save(){
        studentDao.save();
    }
}

(7)测试

public class Testdemo {
    public static void main(String[] args) throws SQLException {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ioc.xml");
        TeacherService teacherService = applicationContext.getBean("teacherService", TeacherService.class);
        teacherService.save();
        StudentService studentService = applicationContext.getBean("studentService",StudentService.class);
        studentService.save();
    }
}

在这里插入图片描述
思路如图所示:
在这里插入图片描述
第二种实现方式思路
在这里插入图片描述
(1)创建实体类并注入容器

@Repository
public class Teacher {
}
@Repository
public class Student {
}

(2)dao层创建接口 BaseDao

public  interface BaseDao <T>{
    public void save();
}

(3)StudentDao实现类

@Repository
public class StudentDao implements BaseDao<Student> {
    @Override
    public void save() {
        System.out.println("保存学生数据");
    }
}

(4)TeacherDao实现类

@Repository
public class TeacherDao implements BaseDao<Teacher> {
    @Override
    public void save() {
        System.out.println("保存老师数据");
    }
}

(5)BaseService接口(区别)

public class BaseService<T> implements BaseDao<T> {
    @Autowired
    private BaseDao<T> baseDao;
    @Override
    public void save() {
        baseDao.save();
    }
}

(6)StudentService类

@Service
public class StudentServiceDemo1 extends BaseService<Student> {
}

(7)TeacherService类

@Service
public class TeacherServiceDemo1 extends BaseService<Teacher>{
}

(8)测试类

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值