【Java EE】----Spring框架创建和使用

1.Spring框架创建

  • 创建一个maven项目

【Java EE】----Spring框架创建和使用_第1张图片

  • 添加Spring框架支持

上下文
        
            org.springframework
            spring-context
            5.2.3.RELEASE
        
Bean对象
       
            org.springframework
            spring-beans
            5.2.3.RELEASE
        
    
  • 创建普通类和main方法来运行spring框架 

【Java EE】----Spring框架创建和使用_第2张图片

2.存储Bean对象 

  • 创建Bean对象

【Java EE】----Spring框架创建和使用_第3张图片

  • 将创建的bean注册到spring当中(在xml里面进行实现的)
  1. 在resources里面配置⽂件 spring-config.xml


      
  1. 在配置文件里面去把Bean注册到spring里面

【Java EE】----Spring框架创建和使用_第4张图片

 3.获取Bean对象

  • 对象交给Spring去管理,先得到Spring上下文对象
  1. 通过ApplicationContext来获取Spring上下文
ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");

     2.通过BeanFactoryContext来获取Spring上下文

BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
面试题:ApplicationContext和BeanFactoryde的区别?

相同:都可以得到Spring上下文对象;都来自Spring顶级接口

不同:继承关系和功能⽅⾯来说: ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量。
  • 通过Spring上下文,获取某一个指定的Bean对象
 User user = (User) context.getBean("user");  这里的id需要与配置文件的id对应
 根据类型来获取Bean对象
 User user=context.getBean(User.class);

  当有⼀个类型被重复注册到 spring-config.xml 中时,只能使⽤根据名称获取了

 根据创建的Bean名称和类型来获取
User user=context.getBean("user",User.class);
  • 使用Bean对象
public class App {
    public static void main(String[] args) {
        //得到Spring对象上下文
        //ApplicationContext context=new ClassPathXmlApplicationContext("spring-config");
        BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        //加载某个Bean对象
        User user = (User) context.getBean("user");
        //使用Bean对象(可选)
        System.out.println(user.sayhi());
    }

}

4.Spring更简单的读和取

  • 配置扫描路径,只有被配置的包下的所有类,添加了注解才能被保存在Spring中


       
   扫描的根路径
  • 注意:如果没有设置包,所有的类都写在java根路径下,需要使用**来扫描本目录路径
   扫描的根路径

【Java EE】----Spring框架创建和使用_第5张图片

  • 添加注解存储Bean对象
1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration。
2. ⽅法注解:@Bean
  1. @controller控制器

【Java EE】----Spring框架创建和使用_第6张图片【Java EE】----Spring框架创建和使用_第7张图片

  1. @Service服务存储

【Java EE】----Spring框架创建和使用_第8张图片【Java EE】----Spring框架创建和使用_第9张图片

  1. @Repository 仓库存储

【Java EE】----Spring框架创建和使用_第10张图片【Java EE】----Spring框架创建和使用_第11张图片

  1. @Component组件存储

【Java EE】----Spring框架创建和使用_第12张图片【Java EE】----Spring框架创建和使用_第13张图片

  1. @Configuration配置存储

【Java EE】----Spring框架创建和使用_第14张图片【Java EE】----Spring框架创建和使用_第15张图片

这些注解⾥⾯都有⼀个注解 @Component,本身就是属于 @Component 的“⼦类”

5.Bean的读取

通常我们 bean 使⽤的都是标准的⼤驼峰命名,⽽读取的时候⾸字⺟⼩ 写就可以获取到 bean 

【Java EE】----Spring框架创建和使用_第16张图片

  • 注意:
  1. 当Bean对象的类名首字母小写,和首字母大写获取方式一样,类名首字母小写
  2. 当Bean对象的类名的第一个和第二个字母都大写,使用原类名

 6.5大注解有什么关系?为什么需要5个类注解?(面试)

  • @Controller(控制器):归属于业务逻辑,用来控制用户的行为,它用来检查用户参数有效性
  • @Service(服务层):归属于服务层,调用持久化类来实现相应的功能,不是直接和数据库交互,类似于控制中心
  • @Repository(仓库):归属于持久层,直接和数据库交互,每个表都会对应一个Repository
  • @Configuration(配置层):用来配置当前项目一些信息
  • @Component(组件):归属于公共工具类,提供某些公共方法

这些注解⾥⾯都有⼀个注解 @Component,本身就是属于 @Component 的“⼦类”

7.方法注解Bean 

【Java EE】----Spring框架创建和使用_第17张图片【Java EE】----Spring框架创建和使用_第18张图片

  • 重命名Bean(支持设置name属性,因为方法名是可以重复的,可能会导致获取的Bean对象不知道是哪个)给Bean设置name属性,原方法名就不可以在使用

【Java EE】----Spring框架创建和使用_第19张图片【Java EE】----Spring框架创建和使用_第20张图片

8.更简单的获取Bean对象 (3种方式)

  • 属性注入

【Java EE】----Spring框架创建和使用_第21张图片【Java EE】----Spring框架创建和使用_第22张图片

优点:实现简单

缺点:无法注入一个不可变对象;只是用于IOC容器;更容易违背单一设计原则

  • 构造方法注入(当类里面只有一个构造方法,AutoWired也可以省略)

【Java EE】----Spring框架创建和使用_第23张图片【Java EE】----Spring框架创建和使用_第24张图片

  • 构造方法注入(使用@Resource关键词)

【Java EE】----Spring框架创建和使用_第25张图片

@Autowired和@Resource区别:

出身不同:@Autowired 来⾃于 Spring,⽽ @Resource 来⾃于 JDK 的注解;

使⽤时设置的参数不同:相⽐于 @Autowired 来说,@Resource ⽀持更多的参数设置,例如
name 设置,根据名称获取 Bean。

@Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊,⽽ @Resource 只能⽤于 Setter 注
⼊和属性注⼊,不能⽤于构造函数注⼊。

优点:可以注入不可变对象;注入的对象不会被修改(加上final)构造方法在类加载时只执行一次;注入对象被完全初始化;通用性更好

缺点:没有属性注入简单

  • Setter注入(从Spring里面取对象)

【Java EE】----Spring框架创建和使用_第26张图片【Java EE】----Spring框架创建和使用_第27张图片

优点:更符合单一设计原则,只针对一个属性;写法比属性注入复杂,更符合单一设计原则

缺点:不能注入不可变对象;注入的对象可以被修改(set方法是普通方法,可被重复调用,调用时存在修改风险)

9.同⼀类型多个 @Bean 报错 

【Java EE】----Spring框架创建和使用_第28张图片【Java EE】----Spring框架创建和使用_第29张图片

  • 方法1:使⽤ @Resource(name="XXX")

【Java EE】----Spring框架创建和使用_第30张图片

  • 方法2:使⽤ @Qualifier 注解定义名称

【Java EE】----Spring框架创建和使用_第31张图片

你可能感兴趣的:(JAVE,EE,java,spring)