- Samsung Galaxy A52s 5G - jó S-tehetség
- Egyszerre legnagyobb és legkisebb is a Garmin Venu X1
- iPhone topik
- Mobil flották
- Yettel topik
- Xiaomi Watch S1 - szép az idő
- Vivo X200 Pro - a kétszázát!
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Android alkalmazások - szoftver kibeszélő topik
- Netfone
Új hozzászólás Aktív témák
-
F1rstK1nq
aktív tag
Megértem. Tényleg embere válogatja.
Egyébként Spring Boot olyan szépen autoconfigolja, hogy öröm belekezdeni.Ránéztem, nem rossz dolog ez a Mustache sem.
Viszont, most ez az AngularJS 2 + Spring keltette fel az érdeklődésem, hogy megemlítettétek, biztos kipróbálom valami hobbiprojektben a közeljövőben.(#9158) Aethelstone: Nekem sincs jó véleményem Vaadin-ról, sőt nagyon megutáltam a projekt végére, pedig még a Vaadin Spring integrációt is használtuk. CustomLayout-tal még hagyján, de amit kigenerál magából néha enélkül, az vicc. Mindegy, egy Vaadin Certification-re jó volt a tudás, projekt után, de nem igazán tervezek rá visszatérni, ha nem muszáj.
-
F1rstK1nq
aktív tag
Én kedvencem Spring + Thymeleaf kombó, Bootstrap-vel fűszerezve.
Valaki próbálta? Ajánlom. -
F1rstK1nq
aktív tag
válasz
Taoharcos #9125 üzenetére
Lehet én vagyok a maradi, de nem egyszerűbb/hatékonyabb így? mvnrepository, majd megkeresed és bemásolod a megfelelő dependency-t a pom-odba?
-
F1rstK1nq
aktív tag
Érdekes amit írsz, bizonyos szinten érhető is, de szerintem ez abszolút szubjektív. (még ha te nem is annak érzed)
SLF4J oldaláról: "We used to recommend that loggers members be declared as instance variables instead of static. After further analysis, we no longer recommend one approach over the other."
Ott van egy jó kis táblázat a pro/kontra érvekre, de ő sem akar kimondott állást foglalni, hogy osztály vagy példány változó legyen a logger.
Régebben erről már olvastam egy kisebb vélemény ütközést stackoverflow-n is.
Akkor engem meggyőzött a példányváltozós logger használat és úgy kötöttem ki végül itt, hogy kényelmes nekem a logger példány inject-álás prototype-ként. -
F1rstK1nq
aktív tag
Nem tudom kinek mennyire új dolog ez, de leírom, mivel doksiban nem nagyon tűnt fel.
Spring 4.3-mal bejött az InjectionPoint class. CDI-ben már régebb óta van ilyen. Nekem ez abból az szempontból volt érdekes, hogy ennek a segítségével használtam CDI környezetben eddig a Loggereket. (inject-áltam, nekem ez így kényelmesebb volt, mint a standard megoldás)Íme spring oldalon a megvalósítás:
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public Logger logger(InjectionPoint injectionPoint){
return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass());
}(SL4FJ a facade)
Ezt ugye csak be kell szúrni a megfelelő osztályokba és kész:
@Autowired
private Logger logger;Mit gondoltok? Tetszik/nem tetszik?
Jobban szeretitek a hagyományos megoldást?private final Logger logger = LoggerFactory.getLogger(getClass().getName());
-
F1rstK1nq
aktív tag
Én is ezt hittem sokáig, hogy elég a Hikari függőséget betenni a pom-ban, aztán kidebugoltam a közelmúltban és láttam, hogy így az alap tomcat-jdbc datasource-t szúrja be.
Szóval kell a
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
.Majd checkold azért te is légyszí, ha lesz rá időd.
-
F1rstK1nq
aktív tag
Nem tudom Karma, hogy csinálja, mert lehet máshogy is, de nekem ez tűnik a legegyszerűbbnek, én így szoktam.
A pom-ba berakod a dependency-t, verzió nem kell ugye, mert Spring Boot a parent, azt ő intézi.
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>Majd az application.properties-be ezt a sort:
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
Mivel a default, a tomcat-jdbc datasource.Majd a megfelelő értékekből létrehozza a datasource-ot a Spring Boot.
pl.:spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.url=jdbc:hsqldb:mem:test
spring.datasource.username=sa
spring.datasource.password= -
F1rstK1nq
aktív tag
A Head First Design Patterns könyvhöz még nem volt ugyan szerencsém, de nagyon dicsérik.
-
F1rstK1nq
aktív tag
Ha nem probléma az angol, akkor a legjobb könyv a témában, ami ad egy részletes leírást a nyelvről: Thinking in Java
Abszolút kezdőknek is ajánlott és mérföldekkel jobb, mint a magyar "társaik". -
-
F1rstK1nq
aktív tag
válasz
Dave-11 #8191 üzenetére
Ez a klasszikus megoldás:
String fileName = "res01.res";
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource(fileName);
if (resource != null) {
File file = new File(resource.getFile());
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}Viszont, ha érdekel más módszer is, itt még tudsz csemegézni Java8-as megoldások közül is. Viszont amit ezekben a megoldásokban nem látsz, hogy hogyan éred el a resources alatti fájlokat. Így:
ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource(fileName); -
F1rstK1nq
aktív tag
Spring-re Spring in Action.
Nagyon jó könyv, szájbarágós, angolja sem vészes, ha attól félnél.
-
F1rstK1nq
aktív tag
válasz
Aethelstone #8032 üzenetére
Így van, én is erre szántam a "még legmagasabb értelmes interfészt megadni" részemet, de lehet a tiéd jobb megfogalmazás.
-
F1rstK1nq
aktív tag
válasz
pvt.peter #8029 üzenetére
Így megmarad az az előnyöd, hogy csak a Lista implementációját változtatod meg példányosításkor, a kód többi része változatlan marad. (Például ha úgy döntesz, ArrayList helyett LinkedList-et használsz később)
Clean Code szerint egyébként érdemes szinte minden esetben a referencia értéknek a még legmagasabb értelmes interfészt megadni.
-
F1rstK1nq
aktív tag
válasz
Aethelstone #7656 üzenetére
Természetesen meglehet és teljesen jó az a megoldás is, csak az hivatalosan nem típusbiztos és nem refactor barát.
(én idea zom az is megtudja amúgy
)
@ ComponentScan(basePackages={"package1", "package2"})
Kinek mi? Én egyszerűbbnek tartom a marker interfacet.
Egy elméleti példával be is bizonyítom, hogy miért:
-van egy top level package-ed (hu.somebody.main)
-ez alatt lesz 3 package-ed ahol a component-ek leszek definialva:
(hu.somebody.main.package1, hu.somebody.main.package2, hu.somebody.main.package3)
-a marker interface-t beteszed a top level pakage-edbe:package hu.somebody.main;
public interface Application {}Ez az alap felállás. Akkor a 2 opció scannelésre:
@Configuration
@ComponentScan(basePackageClasses = Application.class)
class ApplicationConfig {}vagy
@Configuration
@ComponentScan(basePackages={"hu.somebody.main.package1", "hu.somebody.main.package2", "hu.somebody.main.package3"})
class ApplicationConfig {}Melyik tűnik egyszerűbbnek?
-
F1rstK1nq
aktív tag
Ez nem szar, így van kitalálva Springben. Amit megjelölsz @Component annotációval (vagy valamelyik stereotype-jával) az az osztályod lesz Component és működnek rajta a spring specifikus dolgok (pl: Autowired). Ez természetesen a Spring álltal ajánlott implicit mód (Implicit bean discovery and automatic wiring). Lehet expliciten is @Bean annotációval Javaconfig-ból, meg xml config-ból is, de most kicsit elkalandoztam.
Amit te keresel, erre van egy jó kis "best practice" Springben: Csinálj egy üres marker interface-t abba a csomagodba ahol scannelni szeretnél és akkor arra az interfacere hivatkozz a ComponentScan-nél.
pl.: @Configuration
@ComponentScan(basePackageClasses = Application.class)
class ApplicationConfig {}marker interface:
public interface Application {} -
F1rstK1nq
aktív tag
válasz
Oppenheimer #7629 üzenetére
Jól tetted. Egyébként apró észrevétel, de én úgy tudom Spring Boot-nál ExceptionalBackend/src/main/java/spring-config.xml fájl teljesen fölösleges, nyugodtan törölheted.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Lexus, Toyota topik
- Samsung Galaxy A52s 5G - jó S-tehetség
- Kettő együtt: Radeon RX 9070 és 9070 XT tesztje
- Milyen légkondit a lakásba?
- Egyszerre legnagyobb és legkisebb is a Garmin Venu X1
- iPhone topik
- Kertészet, mezőgazdaság topik
- EA Sports WRC '23
- BestBuy topik
- Energiaital topic
- További aktív témák...
- Iphone 13 Pro Max 128 GB /// 86% Akku // Számlával és Garaniával
- Iphone 12 Pro Max 128 GB /// 88% Akku // Számlával és Garanciával
- Xiaomi Redmi 9A 32GB Kártyafüggetlen 1Év Garanciával
- Apple iPhone 12 Pro Max 128GB Kártyafüggetlen 1Év Garanciával
- Samsung Galaxy S23PLUS 256GB Kártyafüggetlen 1Év Garanciával
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Csere-Beszámítás! Asztali számítógép játékra! I5 14400F / RX 6900 XT 16GB / 32GB DDR5 / 1TB SSD
- Robbanj a jövőbe egy új Ryzen 7 5800X-szel! Kamatmentes rèszletre is!!
- Realme C30 32GB, Kártyafüggetlen 1Év Garanciával
- Apple iPhone 11 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged