spring注解开发:常用注解,bean的加载控制,整合第三方技术,Ioc的底层核心原理
发布日期:2021-05-08 23:13:32 浏览次数:25 分类:博客文章

本文共 20476 字,大约阅读时间需要 68 分钟。

���������������

������������

1)���������������������

1.1)���������������������

���������������������������xml������������������������������������������������������������������������������������������������

 

 

1.2)���������������������

  • ��������������������������������������������������������������������������������������������� 

 

 

  • XML���������������������������������������������������������������������������������������������������������������������������������������������������������������

 

 

 

2)������������(������)

2.1)������������������

  • ���������������������������������������������������

  • ���������

    • ������������������������������������������������������������������������������������

    • ���������������������������������������������������������

    • ������������������������������java������

    • ������������������spring������������������

    • ������������������������������������������������������spring���������������������IoC������

  • ���������

    • ���������������������������XML���������������������������������������������IoC���������������������������������������������������

    • ������������������������������������XML������������

2.2)bean���������

  • ���������@Component

  • ������������������

  • ������������������������

  • ������������������������spring���������bean

  • ���������

    @Component("userService") public class UserServiceImpl implements UserService {}
  • ���������@Component������������������������������@Component

    • @Controller(���������)

    • @Service(���������)

    • @Repository(���������)

  • ������������

    • value���������������������bean���������id

      @Component(value="beanId") public class ClassName{}

       

2.3)bean������������

  • ���������@Scope

  • ������������������

  • ������������������������

  • ���������������������������bean���������scope������

  • ���������

    @Scope("singleton") public class ClassName{}
  • ������������

    • value���������������������bean������������singleton���prototype������������singleton

      @Scope(value="prototype") public class ClassName{}

       

2.4)bean���������������

  • ���������@PostConstruct���@PreDestroy

  • ���������������������

  • ���������������������������

  • ���������������������������bean���������������������������

  • ���������

    @PostConstruct public void init() { System.out.println("init..."); } ��� @PreDestroy public void destroy() {}

������

  1. ���������������������<context:component-scan base-package="com.itheima"/>

  2. bean������������������������������Component, Controller, Service, Repository

  3. bean���������������������������Scope, PostConstruct(���������), PreDestroy(���������)

2.5)���������������������

  • ���������@Bean

  • ���������������������

  • ���������������������������

  • ������������������������������������������spring���������bean

  • ���������

    @Bean("dataSource") public DruidDataSource createDataSource() { return ������; }
  • ���������

    • ���������������bean������������������������������������������@Bean���������������bean���������������

    • ���������������������XML���������������������������������������������bean���������������������������������������������

    • @Bean���������������������spring������������������������������������������

      @Component public class JDBCConfig { }
  • ������������

    • value���������������������bean���������id

2.6)bean������������������������������

  • ���������@Value

  • ������������������������������������

  • ������������������������������set������������������

  • ���������������������������������������������������������

  • ���������

    @Value("zhangsan")private String username;
  • ���������

    • value���������������������������������

    • value���������SpEL���@Value("#{'zhangsan'}")

    • @value������������������������������������������������set������

    • value���������������properties������������������������������������������properties���������������������

  • ������������

    • value���������������������������������������������������

2.7)bean���������������������������

  • ���������@Autowired���@Qualifier

  • ������������������������������������

  • ������������������������������������������������

  • ������������������������������������������������������������������������

  • ���������

    @Autowired(required = false) private UserDao userDao;
  • ���������

    • @Autowired���������������������

    • ������@Qualifier������������������������������bean���id

      @Autowired@Qualifier("userDao")private UserDao userDao;
  • ������������

    • required���������������������������������null

2.8)bean���������������������

  • ���������@Primary

  • ������������������

  • ������������������������

  • ���������������������������bean������������������������������

  • ���������

    @Component@Primarypublic class ClassName{}
  • ���������

    @Autowired������������������������������������������������bean���������@Primary������������������������������������������������@Primary������������������������������

2.9)bean���������������������������������������(������)

  • ���������@Inject���@Named���@Resource

  • ���������

    • @Inject���@Named���JSR330������������������

    • @Inject = @Autowired ���@Named = @Qualifier������������

  • @Resource���JSR250���������������������������������������������

  • @Resource������������

    • name������������������bean���id

    • type������������������bean������������������������������Class������

������

������������

  1. ������������������������@Value

  2. ������������������

    • @Autowired = @Inject

    • @Qualifier = @Named

    • @Primary

    • @Resource: name, type

2.10)������properties������

  • ���������@PropertySource

  • ������������������

  • ������������������������

  • ���������������properties���������������������

  • ���������

    @PropertySource(value={"classpath:jdbc.properties","classpath:abc.properties"},ignoreResourceNotFound = true) public class ClassName { @Value("${propertiesAttributeName}") private String attributeName; }
  • ���������

    • ���������*������������

    • ���������������������spring���������bean������������������������������

  • ������������

    • value������������������������������properties���������

    • ignoreResourceNotFound���������������������������������������������������false

2.11)���������������

  • ���������@Configuration���@ComponentScan

  • ������������������

  • ������������������������

  • ���������������������������spring���������������������

  • ���������

    @Configuration@ComponentScan("scanPackageName")public class SpringConfigClassName{}
  • ���������

    • ���������������������������spring������������������������������������������������������������������������

    • bean������������������������@ComponentScan������

AnnotationConfigApplicationContext

  • ���������������������������������������������������AnnotationConfigApplicationContext

  • ������������������ AnnotationConfigApplicationContext ���������������������������@Configuration������������������

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

2.12)���������bean���������������

  • ���������@Import

  • ������������������

  • ������������������������

  • ������������������������bean������spring���������������

  • ���������

    @Configuration@Import(OtherClassName.class)public class ClassName {}
  • ���������

    • @Import���������������������������������������������������������������������������������������������������������������

      @Import({JDBCConfig.class, Abc.class})
    • @Bean���������������������������������������������spring���������������������@Component������

    • ���������������������������������������@Import������������������������������

       

������

  1. ���������������Value, Autowired, Qualifier, Primary, Inject, Named, Resource

  2. ������properties���������PropertySource -> Value("${key}")

  3. ������������Configuration, ComponenScan

  4. ������������������Import

 

3)bean������������(������)

3.1)������������

(1)@DependsOn

  • ���������@DependsOn

  • ���������������������������������

  • ���������bean���������������������������������������

  • ���������������bean���������������������������������bean������������������������

  • ���������

    @DependsOn("beanId")public class ClassName {}
  • ���������

    • ������������������������@DependsOn���������bean���������@Bean���������������bean������������

    • ���������������������@DependsOn���������bean���������������������������@Bean���������bean������������

    • ���������������������@DependsOn���������bean���������@Component������������bean������������

  • ������������

    • value���������������������������bean������������bean���id

(2)@Order

  • ���������@Order

  • ������������������������

  • ���������������������������������������������

  • ������������������������������������������������������������������������

  • ���������

    @Order(1)public class SpringConfigClassName {}

(3)@Lazy

  • ���������@Lazy

  • ���������������������������������

  • ���������bean���������������������������������������

  • ���������������bean������������������������������������

  • ���������

    @Lazypublic class ClassName {}

3.2)������������������������

@DependsOn

  • ������������������������������������������������bean���������������������

@Lazy

  • ������������������������������������������������������bean������������������

@Order

  • ������������������������������������������������������������������������������������

 

4)���������������������(������)

4.1)������������MyBatis������

 

 

 

 

  • ���������������������������������bean���������������������������

  • ���������������������������������������������������������������������������������������������������������������������bean

  • ������������������������bean���������������������������������������������bean���

  • ������AnnotationConfigApplicationContext���������������������������������������������������������������������������

 

 

4.2)������������MyBatis������

1.������mybatis���������������������������������������

public interface AccountDao { ��� @Insert("insert into account(name,money)values(#{name},#{money})") void save(Account account); ��� @Delete("delete from account where id = #{id} ") void delete(Integer id); ��� @Update("update account set name = #{name} , money = #{money} where id = #{id} ") void update(Account account); ��� @Select("select * from account") List
findAll(); ��� @Select("select * from account where id = #{id} ") Account findById(Integer id); }

2.���������������@Service������bean���������@Autowired������������

@Service("accountService") public class AccountServiceImpl implements AccountService { ��� @Autowired private AccountDao accountDao; }

3.������Spring������������SpringConfig������������properties������

@Configuration@PropertySource("classpath:jdbc.properties")public class SpringConfig {}

4.������������������JDBCConfig���MyBatisConfig���������������������������������������SpringConfig

���������������������JDBCConfig

public class JDBCConfig {    @Value("${jdbc.driver}")    private String driver;    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String userName;    @Value("${jdbc.password}")    private String password;    @Bean(value = "dataSource")    public DataSource getDataSource(){        DruidDataSource ds = new DruidDataSource();        ds.setDriverClassName(driver);        ds.setUrl(url);        ds.setUsername(userName);        ds.setPassword(password);        return ds;    }}

MyBatis������������MyBatisConfig

public class MyBatisConfig {    @Bean    public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource){        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();        ssfb.setTypeAliasesPackage("com.itheima.domain");        ssfb.setDataSource(dataSource);        return ssfb;    }    @Bean    public MapperScannerConfigurer getMapperScannerConfigurer(){        MapperScannerConfigurer msc = new MapperScannerConfigurer();        msc.setBasePackage("com.itheima.dao");        return msc;    }}

5.������������������������JDBCConfig���MyBatisConfig���������������������������SpringConfig���

@Configuration@ComponentScan("com.itheima")@PropertySource("classpath:jdbc.properties")@Import({JDBCConfig.class,MyBatisConfig.class})public class SpringConfig {}

6.������AnnotationConfigApplicationContext���������������������

public class App {     public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); AccountService accountService = (AccountService) ctx.getBean("accountService"); Account ac = accountService.findById(3); System.out.println(ac); } }

 

4.3)������������Junit

1.������Spring������Junit������������Spring5.0���������������Junit������������������4.12���������

   
junit
junit
4.12
org.springframework
spring-test
5.1.9.RELEASE

2.Spring������Junit���������������������Spring���������Junit������������

@RunWith(SpringJUnit4ClassRunner.class)

3.������Spring���������

@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class UserServiceTest { @Test public void testSave() {} }

5)IoC������������������

5.1)IoC������������

������������������Ctrl+n

������������������Ctrl+h

���������������������Alt+7

 

 

1.BeanFactory������ 

 

 

2.HierarchicalBeanFactory������ 

 

 

3.AutowireCapableBeanFactory������ 

 

 

4.ListableBeanFactory 

 

 

5.2)���������������

  • ���������������������������������������������������bean���������������bean

 

 

5.3)���������������������������������

  • ���������@ComponentScan

  • ������������������

  • ������������������������

  • ���������������spring���������������������������

  • ���������

    @ComponentScan(     value="com.itheima", //������������������������ excludeFilters = //������������������������������������������ @ComponentScan.Filter( //��������������� type= FilterType.ANNOTATION, //��������������������������������������������� classes=Service.class) //���������������������������������������@Service���������bean )

excludeFilters���������������������������

includeFilters���������������������������

type���������������������������ANNOTATION, CUSTOM

5.4)������������������������(������)

  • ���������TypeFilter

  • ���������������

  • ���������������������������������

  • ������������������������

    public class MyTypeFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { //������������������������������������������ ClassMetadata classMetadata = metadataReader.getClassMetadata(); //��������������������������������������� String className = classMetadata.getClassName(); if(className.equals("com.itheima.dao.impl.BookDaoImpl")){ return true; } return false; } }
  • ���������������������������������������bean���������������������������������������FilterType.CUSTOM���������������������������������MyTypeFilter.class���

    @ComponentScan(         value = "com.itheima", excludeFilters = @ComponentScan.Filter( type= FilterType.CUSTOM, classes = MyTypeFilter.class ) )

5.5)������������������(������)

1.���������������Spring������bean

  • ������bean������������������

    • XML���������������<bean />������������

    • ������@Component���������������������

2.���������������������������������������

  • ���������������������������������������������������bean���������������������������������������bean���������

    ������������ImportSelector

    • ���������ImportSelector

  • ���������������

    • ������������������bean���������

  • ���������

public class MyImportSelector implements ImportSelector {    public String[] selectImports(AnnotationMetadata icm) {          return new String[]{"com.itheima.dao.impl.AccountDaoImpl"};      }  }
@Configuration@ComponentScan("com.itheima")  @Import(MyImportSelector.class)  public class SpringConfig {  }

1.���properties������������������������������������

public class MyImportSelector implements ImportSelector {      @Override      public String[] selectImports(AnnotationMetadata importingClassMetadata) {  	    //2.������import.properties������������������������        	ResourceBundle bundle = ResourceBundle.getBundle("import");          String className = ,bundle.getString("className");          return new String[] {className};      }  }
#2.������import.properties������������������������  className=com.itheima.dao.impl.BookDaoImpl

2.���properties������������������������������������

public class MyImportSelector implements ImportSelector {      @Override      public String[] selectImports(AnnotationMetadata importingClassMetadata) {  //      3.������import.properties������������������������          ResourceBundle bundle = ResourceBundle.getBundle("import");          String className = bundle.getString("className");          return className.split(",");      }  }
#3.������import.properties������������������������  className=com.itheima.dao.impl.BookDaoImpl,com.itheima.dao.impl.AccountDaoImpl

3.���properties������������������������������������������������������������������������CustomerImportSelector

path=com.itheima.dao.impl.*

 

5.6)������������������(������)

  • ���������ImportBeanDefinitionRegistrar

  • ���������������

  • ������������������bean���������������

  • ���������

    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {    public void registerBeanDefinitions(AnnotationMetadata icm, BeanDefinitionRegistry r) {        ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(r, false);        TypeFilter tf = new TypeFilter() {            public boolean match(MetadataReader mr, MetadataReaderFactory mrf) throws IOException {                return true;            }        };        scanner.addIncludeFilter(tf);        scanner.scan("com.itheima");    }}

5.7)bean���������������������(������)

 

 

  • BeanFactoryPostProcessor

    • ���������������������bean������������������������bean���������������������������������������������������������������������������

    • ������������������������������������������������������������������������

      public class MyBeanFactory implements BeanFactoryPostProcessor {    @Override    //���������������bean������������������    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {        //���1������        System.out.println("���1������������������������������������...");    }}
    • ���������������������������MyBeanFactory

      @Configuration@ComponentScan("com.itheima")@Import(MyBeanFactory.class)public class SpringConfig {...}
  • BeanPostProcessor

    • ������������������������bean������������������������������������������������bean���������������������������������������������������

    • ������������������������������������������bean������������������������������bean������������������

      public class MyBean implements BeanPostProcessor {        //������bean���������������������    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {        //���2������        System.out.println(beanName);        System.out.println("���2������������������������������������������������");        return bean;    }    //������bean���������������������    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {        //���4������        System.out.println("���4���������������������������������������");        return bean;    }}
      @Configuration@ComponentScan("com.itheima")@Import({MyBeanFactory.class, MyBean.class})public class SpringConfig {}
  • InitializingBean

    • ������������������������bean���������������������������������������������������������������������bean���������������������������

    • ������������������������������������������������bean������������������������������������������������

      @Service("mobileService")public class MobileServiceImpl implements MobileService, InitializingBean {    @Override    public void create() {        System.out.println("������������������...");    }    @Override    //������������bean���������������������������������init-method������������    public void afterPropertiesSet() {        //���3������        System.out.println("���3���������������������������");    }}

5.8)���������bean���������������������(������)

 

 

  • ������������FactoryBean���������MyBatis������SqlSessionFactoryBean������

     

     

    ������������bean���������������������������������������������������������������

    public class EquipmentDaoImplFactoryBean implements FactoryBean { ��� @Override public Object getObject() throws Exception { return new EquipmentDaoImpl(); } ��� @Override public Class
    getObjectType() { return null; } ��� @Override public boolean isSingleton() { return false; } }

    ������FactoryBean���

    @Configuration public class SpringConfig { ��� @Bean("equipmentDaoImplBean") public EquipmentDaoImplFactoryBean equipmentDaoImplBean() { return new EquipmentDaoImplFactoryBean(); } }

    ���������������

    public class App {       public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); EquipmentDao equipmentDao = (EquipmentDao)ctx.getBean("equipmentDaoImplBean"); equipmentDao.save(); }

FactoryBean���BeanFactory������

  • FactoryBean���������������������bean���������������

  • BeanFactory���Spring������������������������������bean���������������������''[[

上一篇:Idea快捷键整理
下一篇:redis常用命令整理

发表评论

最新留言

很好
[***.229.124.182]2025年04月27日 02时07分49秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章