学无先后,达者为师

网站首页 编程语言 正文

ioc基于注解方式

作者:仰望星空的快乐 更新时间: 2022-05-10 编程语言

类的注解

@Component

@Service      service层

@Controller      web层

@Repository     dao层

上面四个注解是功能一样的,都可以实现对象的创建,只是习惯把 每个类用在对应的层中,使开发更加清晰

基于注解方式 实现对象的创建

1.引入spring-aop-5.2.6.RELEASE.jar 包,在之前下载的spring-framework-5.2.6.RELEASE的libs中

2.在xml中开启组件扫描

注意约束中添加了两行




    
    

    

3.创建类  在类声明前@后面加需要的那四个类中的一个

package com.service;

import org.springframework.stereotype.Service;

@Service(value = "aa")
//如果按上面这么写,则调用时候应该这样写:  
//Userservice userservice=context.getBean("aa",Usersrvice.class);
// 如果没有写value,调用的时候默认是类名的第一个字母小写,应该如下调用:
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);

public class Usersrvice {

    public  void print()
    {
        System.out.println("userservice的输出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}

调用正常写即可 


import com.service.Usersrvice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Testdemo {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("demo1.xml");
        Usersrvice usersrvice= context.getBean("usersrvice",Usersrvice.class);
        System.out.println(usersrvice);
        usersrvice.print();
    }
}

4.开启组件扫描的细节 

 选择扫描哪些

   
    
        
        
        
    

 选择哪些类不扫描


        
        
        
    

 对象作为另一个类的属性的注解(对象属性)

@Autowired//根据类型进行注入
import com.dao.Userdao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(value = "aa")//service层的类应该用@Service注解
//如果不写参数,则  Usersrvice usersrvice=context.getBean("aa",Usersrvice.class);
// 调用的时候默认是类名的第一个字母小写
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);
public class Userservice {
    @Autowired//根据类型进行注入
     public Userdao userdao;
    public  void print()
    {
        System.out.println("userservice的输出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}

userdao类 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository//dao层类的应该用repository注解
public class Userdao {
    public void print()
    {
        System.out.println("dao的方法执行");
    }
}

测试类

import com.service.Userservice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Testdemo {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("demo1.xml");
        Userservice userservice= context.getBean("aa",Userservice.class);
//        System.out.println(userservice);
        userservice.userdao.print();
    }
}

 输出

@qualifier  根据属性名称注入  当我userdao是个接口,有好多实现类,那么根据类型注入就不行了,需要@qualifier进行辅助


import com.dao.Userdaoimpl1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service(value = "aa")
//如果不写参数,则  Usersrvice usersrvice=context.getBean("aa",Usersrvice.class);
// 调用的时候默认是类名的第一个字母小写
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);
public class Userservice {
    @Autowired//根据类型进行注入
    @Qualifier("daoimpl1")
     public Userdaoimpl1 userdao;
    public  void print()
    {
        System.out.println("userservice的输出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}

package com.dao;

import org.springframework.stereotype.Repository;

@Repository(value = "daoimpl1")//不写默认就是首字母小写userdaoimpl1
public class Userdaoimpl1 implements Userdao{
    public void print()
    {
        System.out.println("dao的方法执行");
    }
}

 @Resource  根据类型注入

@Resource(name="daoimpl1")根据名称注入
import javax.annotation.Resource;//这个resource不是spring的官方包中的,所以不鼓励用这个

@Service(value = "aa")
//如果不写参数,则  Usersrvice usersrvice=context.getBean("aa",Usersrvice.class);
// 调用的时候默认是类名的第一个字母小写
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);
public class Userservice {
    @Resource(name="daoimpl1")
    public Userdaoimpl1 userdao;
    public  void print()
    {
        System.out.println("userservice的输出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}
@Value(value = "10")给普通的属性赋值

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;

@Repository(value = "daoimpl1")//不写默认就是首字母小写userdaoimpl1
public class Userdaoimpl1 implements Userdao{
    @Value(value = "10")
    public int aa;
    public void print()
    {
        System.out.println("dao的方法执行");
    }
}

 去掉xml配置文件,使用注解 作为配置类(全注解开发)

新建一个类config,用来替代xml文件

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {"com"})//basepackages是寻找组件的范围
// 相当于xml文件中的
public class Config {
}

将原来xml的位置换为config类

将对象换为AnnotationConfigApplicationContext

ApplicationContext context=new AnnotationConfigApplicationContext(Config.class);
import com.service.Userservice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Testdemo {
    public static void main(String[] args) {
        ApplicationContext context=new AnnotationConfigApplicationContext(Config.class);
        Userservice userservice= context.getBean("aa",Userservice.class);
        userservice.userdao.print();
    }
}

原文链接:https://blog.csdn.net/sharesb/article/details/123458144

栏目分类
最近更新