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

spring配置

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

spring配置

导入依赖:

        1.父项目依赖配置:

    
        
            
                org.springframework
                spring-framework-bom
                4.3.10.RELEASE
                pom
                import
            
        
    

    
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                
                    true
                
            
        
        
        
            
                src/main/java
                
                    ***.properties
                
            
            
                src/main/resources
                
                    ***.properties
                
            
        
    

        2.子项目依赖配置:


        
        
            org.springframework
            spring-core
            4.3.10.RELEASE
            
                
                    commons-logging
                    commons-logging
                
            
        
        
            org.springframework
            spring-context
        

        
            junit
            junit
            4.12
        

        
            org.slf4j
            slf4j-log4j12
            1.7.21
        
        
            org.slf4j
            jcl-over-slf4j
            1.7.21
        

        
            org.projectlombok
            lombok
            1.18.20
        

        
        
            org.springframework
            spring-test
        

        
        
            javax.inject
            javax.inject
            1
        
    

 Spring的核心:

  1. IOC (Inverse of control )反转控制 或者DI (Dependency Injection,依赖注入)
  • IOC不是什么技术,就是一种设计思想。以往我们需要什么对象就要自己new一个对象,IOC就是将原来new对象交给spring,由spring来创建对象,从spring工厂获得对象,而spring负责控制对象的生命周期和对象与对象之间的关系。

        eg:就好比现在你遇到一个你喜欢的女生,你想要熟悉了解她,打探她的消息:喜欢啥东西,性格怎么样...还要花时间追。在找女朋友的过程自己要操作每一步。现在有个相亲网,在上面注册一个号,人后告诉红娘:嗯嗯。。我喜欢啥类型的女生,描述一下自己的需求。然后呢,找女朋友这件事就省事多了,红娘找到匹配的信息,然后就给你匹配到这些类型的女生,如果没有信息匹配,返回异常。整个过程不再由我自己控制,而是有相亲网这样一个类似容器的机构来控制。

        Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

   2.DI (Dependency Injection,依赖注入)

 理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”

        ●谁依赖于谁:当然是应用程序依赖于IoC容器;

        ●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

        ●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

        ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

   3.AOP (Aspect Oriented Programming)面向切面编程

1. spring IOC

        第一步:写配置文件

beanConfig.xml


    
    
    
    
    
    
        
        
    
    
    
        
        
        
    

 Bean的配置

Bean细节:

使用Bean 把某个类的对象交给spring, spring创建该类的对象, 默认调用无参构造方法,

如果某个类没有提供无参构造方法,抛如下错误:

 

bean的默认创建时机: spring容器创建之后马上创建对象,

@Data
public class Single {
    private String name;

    public Single() {
        System.out.println("单例的无参构造");
    }

    public Single(String name) {
        System.out.println("单例的有参构造");
        this.name = name;
    }
}

@Test
    public void beanTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beanConfig.xml");
        Person p1 = (Person) context.getBean("p1");
        Person p2 = (Person) context.getBean("p1");
        System.out.println(p1==p2);
    }

bean 对象默认是单例 bean标签对应的对象是唯一,不是该类只能创建一个对象,不是所谓单例模式

getBean(Class clazz) 根据类型获取bean对象, 前提条件: 该类型的bean在Spring容器只能有一个.

    @Test
    public void beanTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beanConfig.xml");
        Person p1 = (Person) context.getBean(Person.class);
        Person p2 = (Person) context.getBean("p1");
        System.out.println(p1==p2);

    }

 Person p1 = (Person) context.getBean(Person.class);

使用这个在配置文件中要只有一个Person

 Bean的Scope:

 

常用的: singleton,默认值, Struts2 处理用户请求: Action Action 类对象一定设置为prototype

Servlet类一定不要写数据类型的属性

多例: bean的创建时机: 在调用getBean() 创建

Bean的属性注入方式:

集合、数组属性的注入 目的:与其他框架整合

@Data
public class Person {
    private Integer id;
    private String name;
    private Car car;
    private Integer[] arr;
    private List list;
    private Set set;
    private Map map;
    private Properties pro;
}


            
                
                    1
                    2
                    3
                
            

           
               
                   l1
                   l2
                   l3
               

           

           
               
                   set1
                   set1
                   set2
               

           

           
               
                   
                   
                   
               
           

           
               
                   pp
                   ppp
               
           
       

 


 beanConfig.xml 的运行:

dao接口

public interface UserDao {
    void getUser();

    void outUser(String name);
}

dao实现类:

public class UserdaoImpl implements UserDao {
    public void getUser() {
        System.out.println("获取用户默认数据");
    }

    public void outUser(String name) {
        System.out.println("User名字:" + name);
    }
}





public class UserDaoOricelImpl implements UserDao {
    public void getUser() {
        System.out.println("Oricel 获取用户数据");
    }

    public void outUser(String name) {

    }
}




public class UserdaoRedisImpl implements UserDao {
    public void getUser() {
        System.out.println("Redis 获取用户数据");
    }

    public void outUser(String name) {

    }
}

测试类编写:

 @Test
    public void userDaoTest(){
        
        ApplicationContext context = new ClassPathXmlApplicationContext("aplicationContext.xml");
        UserService userService = (UserService) context.getBean("userService");
        userService.getUser();
    }

 结果:


 spring DI (Dependency Injection,依赖注入)

        IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象--->简单理解就是我们在service层要调用dao层的方法,以往要自己手动在service层new dao层的对象,才能调用dao层大方法。现在有了spring,在service层你需要要用到dao层的方法,你只需要告诉spring我需要dao层的对象,自己不用 关心dao层对象是怎样创建的。在运行service层时,spring会在适当的时候制造一个dao对象。把dao对象注入到service层中,这样就完成了各个对象之间的关系控制。service层需要依赖dao才能正常运行,到就是由spring注入到service层中,依赖注入名字就是这样来的。那么DI是如何实现的呢?Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

依赖注入测试:

基于注解:

dao:

public interface UserDao {
    void addUser();
}

daoImp:

@Repository("userDao")
@Scope("prototype") //每次用户调用getBean(String name)时,产生一个新的对象
public class UserDaoImpl implements UserDao {
    public void addUser() {
        System.out.println("dao添加学生");
    }
}

 service:

public interface UserService {
    void addUser();
}

 serviceImpl:

@Service("userService")
public class UserServiceImpl implements UserService {

    // Autowired按照类型匹配 UserDao

    // Qualifier 根据bean的name匹配 UserDao
//    @Qualifier("userDao")
    @Autowired
    private UserDao userDao;

    @Value("myName")
    private String name;

    public void addUser() {
        userDao.addUser();
        System.out.println("service层添加学生");
    }
}

 test类:

//测试类整合spring后可以使用注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml") //加载applicationContext.xml配置文件
public class UserServiceTest {
//    @Test
//    public void UserServiceImpl(){
          //测试类没有整合spring
//        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserService userService = app.getBean("userService", UserService.class);
//        userService.addUser();
//    }
    @Autowired
    private UserService userService;
    @Test
    public void UserServiceImpl() {
        userService.addUser();
    }
}

 结果:

 

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

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

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